WaniKani / Android-Notification

Android Notifier for WaniKani
GNU General Public License v3.0
34 stars 8 forks source link

Next level prognosis in the past #11

Closed yacoob closed 5 years ago

yacoob commented 10 years ago

Perhaps this is intended - but today my "next level" prognosis said "1d 10h ago"

screenshot_2013-11-01-01-07-23

I understand that it's just that current level takes longer than estimated time from trend. Why not fallback to secondary method of assessing progress: check how many kanjis are needed, pick this many kanji from the "apprentice" list, take max(their review time)?

s84606 commented 10 years ago

You know, I tried to study on an algorithm that could calculate the minumum leveup time, but I failed miserably :) The apprentice level has four sublevels, and I could not find any way to tell at which sublevel an item is. The API gives the number of reviews, the number of mistakes and the current streak, but this is not enough. Do you have any suggestions?

Pyxzure commented 10 years ago

Unless the mistake occurred at the first try (4 hours mark) then the current sublevel would be (Tries) - 2*(Mistakes). And unless you fail at level 0 twice, the time difference shouldn't exceed 4hrs.

s84606 commented 10 years ago

Unfortunately, the time difference can be larger than this. Take this two examples: unlock -4h-> OK ==> streak=1, eta=4d, 8h unlock -4h-> OK -8h-> OK -1d-> OK -3d-> FAIL -8h-> OK ==> streak=1, eta=3d The API would give the same info (the max_streak would be different, but I can think of more elaborate examples where it would be the same) The difference is more than 1d, which is 22% of the range of possible values: when I tried this with my phone, I found it unsatisfactory because it said that the following day would be a candidate levelup day, when it wasn't (or vice versa). I could correct this estimates e.g. by sampling each item every 4 hours, or by checking their error counts before and after each review session, but that would not be reliable. I think this can't be implemented if the API does not return SRS sublevels. (And thanks for bringing up the point)

s84606 commented 10 years ago

I'm sorry, I forgot to comment on your proposal: I think (Viet, please, correct me if I'm wrong), that if you fail both the reading and the meaning of the same item in a given session, it is downgraded only two times (instead of 4). If it is not, and it is downgraded four times, the estimates would very inaccurate if e.g. the item is at sublevel 1.

Pyxzure commented 10 years ago

I thought you only drop one level? Say, you are at level 3 with the next level at 3 days, it you fail the 3->4 test, don't you get drop to level 2 with the next level in 1 day? The FAQ is pretty ambiguous about that also 'Each time you answer something wrong, you'll drop a "minimum" of one single SRS level.'

So, looks like it can't be done anyway

s84606 commented 10 years ago

Though I'm not perfectly sure about double mistakes, an error makes you drop the item by two levels, e.g. when I fail to burn an item, it becomes a guru item. It's a pity, however, and SRS sublevels would be a great feature for an hypotetical API v 1.3

Pyxzure commented 10 years ago

Come to think of it again, it could actually be done, although the feature seems extravagant and needs huge effort. The JSON packet in the review page actually contains the srs level in terms of 0-9 integer. You could make a local database of the required items that need to guru. Then after answering each item you'd adjust the level accordingly and calculate the time from that.

s84606 commented 10 years ago

I see.. in a private branch of this repository I have some code that can issue json requests like the ones issued by the review module. So, I can get the sublevels in an even simpler way. The problem, however, is that those requests identify the item by a numeric id instead of the item name. So in order to do this I have to store the item-id associations. It's feasable, now that all the items are stored locally, however those associations can be saved only during lessons and reviews. One possilbilty is to display this estimates only if we have all the associations (of course users do not use WKM for all the reviews, so some of them may be missing). I need further study on that, however: I don't want to generate too much traffic.