mirror of
https://github.com/zkldi/Tachi.git
synced 2026-10-02 03:48:14 +03:00
Write up stats page
This commit is contained in:
+1
-1
@@ -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
@@ -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`.
|
||||
@@ -0,0 +1,16 @@
|
||||
window.MathJax = {
|
||||
tex: {
|
||||
inlineMath: [["\\(", "\\)"]],
|
||||
displayMath: [["\\[", "\\]"]],
|
||||
processEscapes: true,
|
||||
processEnvironments: true,
|
||||
},
|
||||
options: {
|
||||
ignoreHtmlClass: ".*|",
|
||||
processHtmlClass: "arithmatex",
|
||||
},
|
||||
};
|
||||
|
||||
document$.subscribe(() => {
|
||||
MathJax.typesetPromise();
|
||||
});
|
||||
+9
-1
@@ -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
|
||||
Reference in New Issue
Block a user