From 7132daef289ac814cd1586688bb62b28b2bdcaa5 Mon Sep 17 00:00:00 2001 From: zkldi Date: Mon, 21 Jun 2021 15:42:01 +0100 Subject: [PATCH] Write up stats page --- docs/docs/index.md | 2 +- docs/docs/user/stats.md | 582 ++++++++++++++++++++++++++++++++++++++- docs/includes/mathjax.js | 16 ++ docs/mkdocs.yml | 10 +- 4 files changed, 604 insertions(+), 6 deletions(-) create mode 100644 docs/includes/mathjax.js diff --git a/docs/docs/index.md b/docs/docs/index.md index 897ea0410..cc8969fe9 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -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 diff --git a/docs/docs/user/stats.md b/docs/docs/user/stats.md index fea59a881..c409b80a7 100644 --- a/docs/docs/user/stats.md +++ b/docs/docs/user/stats.md @@ -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`. \ No newline at end of file diff --git a/docs/includes/mathjax.js b/docs/includes/mathjax.js new file mode 100644 index 000000000..385b5215c --- /dev/null +++ b/docs/includes/mathjax.js @@ -0,0 +1,16 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true, + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex", + }, +}; + +document$.subscribe(() => { + MathJax.typesetPromise(); +}); diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index a18a8e5fd..1ce4d6b92 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -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 \ No newline at end of file + 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 \ No newline at end of file