Write up stats page

This commit is contained in:
zkldi
2021-06-21 15:42:01 +01:00
parent beb64bbacb
commit 7132daef28
4 changed files with 604 additions and 6 deletions
+1 -1
View File
@@ -42,7 +42,7 @@ If you want to contribute to this documentation, you can find the repository [he
If you want to contribute to the Tachi backend code, you can find the repository [here!](https://github.com/zkldi/tachi-server)
!!! note
You should read the [Contributing To Tachi-Server](#) page beforehand.
You should read the [Contributing To Tachi-Server](./codebase/contributing.md) page beforehand.
## Acknowledgements
+578 -4
View File
@@ -1,11 +1,585 @@
# Tachi Statistics
This page serves as a glossary for all the statistics
used in Tachi, alongside their pros and cons.
Tachi has a lot of statistics involved. This page documents all of the
statistics used for each game, and what they mean.
!!! note
These explainations brush over the technical details a bit. If you're interested
in that, you might want to see the [Implementation Details](todo).
*****
## IIDX
## Statistics Overview
### SP
Tachi needs statistics in three main places. The first
place is on each *individual* score.
As an example, if I get a score, it should have a rating
attached onto it.
The second place it needs a rating algorithm is for
a user's profile. This is likely to be combined from
individual score statistics, either by averaging or
totalling.
The third place it needs a rating algorithm is for
a user's sessions. This is also likely to be combined
from individual score statistics.
## Score Statistics
The below statistics apply to individual scores.
!!! note
Every game needs to have a default rating algorithm. A default rating
algorithm needs to work well on all scores from all skill levels.
This means that some more 'pro' oriented statistics cannot be the default.
Some games might not have *any* rating algorithms. If we dont have
a good built-in contender for a default rating algorithm, we have to invent our own.
*****
### ktRating (IIDX)
- **Default for IIDX SP and IIDX DP**
Pros:
- Works on all scores.
- Takes tierlists into account.
- Accuracy Based.
Cons:
- Has a poor understanding of high acc levels (MAX- and beyond).
KtRating (Kamaitachi Rating) is our custom rolled rating algorithm for IIDX.
The issue we have is that IIDX doesn't have any metrics that are a good contender
for our default rating algorithm.
DJ Points is worthless because it depends on the notecount of the chart instead of its level
and BPI only really has any meaning to kaidens, so we're stuck having to roll our own statistic.
KtRating was designed to be a generic **timing** rating algorithm for IIDX. It isn't perfect
by any means, and is generally worse than BPI at 12s. It also struggles with things like
MAX- and stronger scores.
Regardless, it works decently for most charts and most players. It uses a curve such that
an AA on a chart rated X will be worth X points.
!!! note
X will be influenced by the tierlist. For example, mosaic SPA is rated a 12 internally,
but has a lower tierlist timing rating value of around 10.5.
*****
### BPI (IIDX)
Pros:
- Estimates timing difficulty for a chart reasonably.
- Is an understood standard by Kaiden and Post-Kaiden players.
Cons:
- Depends on Kaiden Average and World Record, which can be highly fluctuative.
- Not able to accurately cross-compare values (i.e. 20BPI on one song is often not equivalent in 'skill' to 20BPI on another.)
- Only practically works on 12s. It can be extended to 11s, but it doesn't work as well. It does not work at all below 11.
There are two implementations of BPI - We'll call them Nori BPI and Poyashi BPI, Tachi uses the
more recent Poyashi BPI.
!!! info
As mentioned above in the cons of BPI, Kaiden Average and WR can be rather unreliable estimates
of difficulty. When HV came out, 120hz caused almost all WRs to jump up significantly, which
pretty much completely broke Nori's BPI. To fix this, some parameters were adjusted for
poyashi's BPI, which is implemented [here](https://bpi.poyashi.me).
Namely, reducing the impact of high WRs on average BPI.
As a consequence, Poyashi BPI is significantly easier than Nori BPI in every circumstance.
Whether this is an issue or not is up to you, and I think most players enjoy seeing the
larger number.
BPI looks at the kaiden average and world record for a chart, and constructs an exponential
graph between the two points. A BPI of 0 is equivalent to Kaiden Average, a BPI of 100 is
equivalent to the world record.
!!! info
For scores less than the Kaiden Average, Poyashi BPI uses a negative extension that caps
at -15. This appears to be arbitrary.
For Nori BPI, scores less than the Kaiden Average become [Complex Numbers](https://en.wikipedia.org/wiki/Complex_number).
BPI is intended for use for kaidens and players significantly beyond kaiden. For that, it works
decently. As mentioned above in the cons, BPI is not very cross-comparable. 20BPI on one song
is not necessarily as good as 20BPI on another.
!!! example
20BPI on Verflucht Leggendaria is AAA+66. 20BPI on FAKE TIME is also AAA+66.
*****
### ktLampRating (IIDX)
Pros:
- Corresponds 100% with well-agreed-upon tierlists
- Works on all charts, and uses tierlists down to SP10.
Cons:
- Does not support additional points for Full Combos (will give EXHard points) or Easy Clears (will give 0).
KtLampRating (Kamaitachi Lamp Rating) is a generic algorithm that gives points based
on the quality of the lamp.
This is entirely done with tierlists that are converted into decimal form. So, if a chart
is marked as 11.3 for Hard Clear, HCing it will give 11.3 points.
BP is not taken into account, and the only lamps that give rating are Normal, Hard and EXHard.
!!! note
In the scenario where, say, a NC is worth more than a HC, HCing the chart will give the NC rating.
*****
### VF6 (SDVX, USC)
- **Default for SDVX and USC**
Pros:
- Built-in to the game, and understood by all players.
- Unlike VF4, doesn't massively reward fails on high level charts
- Unlike VF5, has more than 33 unique values.
Cons:
- Values on an individual score are small decimals, which can be difficult to parse.
VF6 (Volforce 6) is the Volforce algorithm used in SDVX 6.
This algorithm is identical to VF5, but with the addition
of another decimal place. This fixes a long standing issue
with VF5 where there were only 33 possible values for a
given score, which made the function painfully discrete.
!!! note
VF5 and VF4 are deprecated in Tachi, and not displayed
anywhere.
VF5 is deprecated because VF6 is strictly better.
VF4 is deprecated because it's 4 years old at this
point, and its flaws make it incredibly abusable.
An implementation of them is still in the
codebase, but is unused and commented out.
*****
### ktRating (DDR)
- **Default for DDR SP and DDR DP**
Pros:
- Works on all scores.
- Takes tierlists into account.
Cons:
- Isn't good at evaluating scores at all.
In a similar vein to [IIDX's KTRating](#ktrating-iidx),
we need a generic rating algorithm for DDR's scores.
However, I don't play DDR at all, and have no idea
of how to properly rate scores.
!!! help
If you want to help out with Tachi, have a bit
of maths knowledge and also play DDR, feel free
to make an issue describing a new default DDR
algorithm.
*****
### MFCP (DDR)
Pros:
- Understood by the community because of its inclusion in [LIFE4](https://life4ddr.com/).
Cons:
- Too Discrete.
- Only applies to a very small subset of scores.
MFCP (Marvelous Full Combo Points) are a scoring system
used by LIFE4 for its challenges. As the name implies,
you only get points for MFCs on a chart. And of that, the
chart must be DIFFICULT or higher, and rated higher than
level 8.
As such, it only applies to a rather small subset of
players and an even smaller subset of their scores.
*****
### KtRating (maimai)
- **Default for maimai**
Pros:
- Works for all scores.
- Doesn't reward weak passes on high rated charts.
- Takes tierlists into account.
Cons:
- Not well understood by players.
- Not amazingly accurate when it comes to high acc scores.
- Hypothetically broken by charts with lots (lots) of breaks.
In a similar vein to [IIDX's KTRating](#ktrating-iidx),
we need a generic rating algorithm for maimai's scores.
Maimai has a built-in rating algorithm, but it is not
implemented, nor is it known to me how it works.
This is an adapted version of IIDX's KTRating to work
for maimai. Since maimai is a very accuracy oriented game,
it punishes low-accuracy scores heavily.
Scores below 90% are heavily nerfed. Timing is rewarded
significantly. Clear type is ignored.
### KtRating (MÚSECA)
- **Default for MÚSECA**
Pros:
- Works on all scores.
- Doesn't reward weak passes on high rated charts.
- Takes tierlists into account.
Cons:
- Not well understood by players.
In a similar vein to [IIDX's KTRating](#ktrating-iidx),
we need a generic rating algorithm for MÚSECA's scores.
MÚSECA's built-in CURATOR RANK is built in a similar
vein to Volforce, but is broken by some
questionable chart rating decisions. This makes it
undesirable for score comparison.
This is an adapted version of the IIDX KTRating
algorithm (again!), with parameters tuned for MÚSECA.
Scores below 900k are heavily nerfed. Timing is rewarded
significantly. Clear type is ignored.
### Sieglinde (BMS)
- **Default for BMS 7K and BMS 14K**
Pros:
- Derives how difficult a lamp is to get by scores on LR2IR and Mocha IR.
- An update to walkure without certain vulnerabilities.
- Only gives rating for popular tables.
Cons:
- Does not support Groove Clears, EX Hard Clears or FCs.
- Likely contentious for individual difference stuff. (What algorithm isn't!)
Sieglinde is a modern implementation of Walkure which
aims to fix a couple of issues with Walkure as an
individual score rating algorithm.
It uses data from IRs to derive an EC and HC value for
a chart, which is then given if you get EC or HC
respectively.
!!! note
Due to poor data on LR2IR, and complete lack of support
in LR2, Groove Clears and EX Hard Clears will be
treated as Easy Clears and Hard Clears, respectively.
Full Combos are similarly removed due to incredibly
poor data. Grinding Full Combos on low level insane
charts was the best way to raise your walkure!
!!! info
For 7K, the currently supported tables are:
- Insane1
- Insane2
- Normal1
- Normal2
- Satellite
- Stella
- Overjoy
For 14K, the currently supported tables are:
- Normal
- Insane
- Satellite
### Rating (CHUNITHM)
- **Default for CHUNITHM**
Pros:
- Built-in to the game.
- Universally understood by players.
Cons:
- ???
Rating refers to CHUNITHM's built-in rating algorithm.
This takes into account an internal tierlist, and looks
at the accuracy of the provided score.
!!! note
I don't play CHUNITHM, so I don't really know the
implementation flaws of this algorithm for individual
scores.
I imagine it probably overrates fails on high level
charts.
### Skill (Gitadora)
- **Default for GITADORA**
Pros:
- Built-in to the game.
- Universally understood by players.
Cons:
- Algorithm is very naive, and doesn't increase exponentially with respect to accuracy.
Gitadora's Skill algorithm is the in-game algorithm
for determining a players 'skill' on a given chart.
The algorithm itself is incredibly simple, and likely
breaks horribly for a lot of scenarios, but, it works
decently for what it is.
!!! note
Unlike almost every other algorithm on this page,
the GITADORA Skill algorithm can be expressed in a single line.
$$
f(p,l) = 0.01p * 20l
$$
Where P is the users percent, and L is the level
of the chart.
*****
## Profile Statistics
This section explains the statistics on a user's profile.
These are almost always derived from individual score
statistics as listed above.
*****
### IIDX
The below statistics apply to SP and DP.
- BPI
The average of your highest 20 BPIs.
- KtRating **(Default)**
The average of your highest 20 ktRatings.
- KtLampRating
The average of your highest 20 ktLampRatings.
*****
### SDVX, USC
The below statistics apply to both SDVX and USC.
- VF6 **(Default)**
Your highest 50 VF6s added together. This has the benefit
of making VF6 not a small decimal, and is generally how
people talk about their volforce.
*****
### DDR
The below statistics apply to both SP and DP.
- MFCP
**ALL** of your MFCP added together.
- KtRating **(Default)**
The average of your highest 20 ktRatings.
*****
### maimai, museca
The below statistics apply to maimai and museca.
- KtRating **(Default)**
The average of your highest 20 ktRatings.
*****
### BMS
- Sieglinde **(Default)**
The average of your best 50 Sieglinde scores.
*****
### CHUNITHM
- Naive Rating **(Default)**
The average of your highest 20 CHUNITHM Ratings.
!!! warning
This is *different* to what you'd expect! CHUNITHM
has a built-in profile rating mechanism, but it has
some awful flaws with respect to losing rating after
playing poorly, and is generally *very* hard to
implement.
*****
### GITADORA
- Skill **(Default)**
Your profile skill as it appears in game. This is the
sum of all your skills on 50 HOT songs and 50 'NOT HOT'
songs.
!!! info
This might be slightly different to your in-game
skill. This may be due to rerates or things like
certain songs no longer being hot.
*****
## Session Ratings
This section explains the statistics on a session.
These are almost always derived from individual score
statistics as listed above.
If a session has less than 10 scores, all of the below
statistics are marked as N/A[^1] except for MFCP.
*****
### IIDX
The below information applies to SP and DP.
- BPI, KtRating, KtLampRating
The average of your highest 10 values for that statistic.
*****
### SDVX, USC
- VF6
The average of your highest 10 VF6's that session.
- Profile VF6 **(Default)**
The above statistic, but multiplied by 50. This is
to scale it up to what you'd normally see on a profile.
The reason for this multiplication is that, generally,
people don't like dealing with decimals. Furthermore,
SDVX players generally talk about their profile volforce,
rather than their individual volforce.
*****
### DDR
The below information applies to SP and DP.
- MFCP
The total MFCP you achieved this session.
!!! warning
Unlike all other statistics, this is not marked
as N/A if you have less than 10 scores.
- KtRating **(Default)**
The average of the highest 10 KtRatings that session.
*****
### maimai, MÚSECA
- KtRating **(Default)**
The average of the highest 10 KtRatings that session.
### BMS
The below information applies to both 7K and 14K.
- Sieglinde **(Default)**
The average of the highest 10 Sieglinde ratings that session.
### CHUNITHM
- Naive Rating **(Default)**
The average of the highest 10 ratings that session.
### GITADORA
- Skill **(Default)**
The average of the highest 10 skills achieved that session.
!!! note
Unlike SDVX, we do not have a ProfileSkill here.
There's no good reason for this, though.
If people want it, it can be added! Feel
free to report it as an issue if you think it
should be added.
[^1]: Internally, they are marked as `null`.
+16
View File
@@ -0,0 +1,16 @@
window.MathJax = {
tex: {
inlineMath: [["\\(", "\\)"]],
displayMath: [["\\[", "\\]"]],
processEscapes: true,
processEnvironments: true,
},
options: {
ignoreHtmlClass: ".*|",
processHtmlClass: "arithmatex",
},
};
document$.subscribe(() => {
MathJax.typesetPromise();
});
+9 -1
View File
@@ -29,6 +29,7 @@ nav:
- "user/overview.md"
- "user/rules.md"
- "user/games.md"
- "user/stats.md"
- API Reference:
- "api/overview.md"
@@ -88,4 +89,11 @@ markdown_extensions:
- footnotes
- toc:
toc_depth: 2
permalink: true
permalink: true
- pymdownx.arithmatex:
generic: true
extra_javascript:
- javascripts/config.js
- https://polyfill.io/v3/polyfill.min.js?features=es6
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js