-
-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
TODO list #137
Comments
What's "Fine-tune the formula for interpolating missing S0"? |
Check the Discord message, I attached a link
|
Also, don't forget to benchmark FSRS v1 and FSRS v2. I'll add that to the list |
I checked, but I don't get the details. Could you elaborate the idea here? |
You have w1 and w2, which are currently set to 3/5. The idea is to find users who have not used one or two grades during their first reviews during the first half of their review history, but started using those grades later, calculate missing S0 values based on that, and check how well they fit. |
Oh well. Forget about it then |
Oh, wait, @L-M-Sherlock Also, are you sure you are checking the right thing? We're not looking for users who never used a certain answer button, we're looking for users who didn't use a certain answer button for their first reviews. For example, if someone never used "Good" during their first review, but used it during their second/third/nth review, then he should count, and you should record his ID. |
def process(user_id):
df = pd.read_parquet(DATA_PATH, filters=[("user_id", "==", user_id)])
df["review_th"] = range(1, df.shape[0] + 1)
df.sort_values(by=["card_id", "review_th"], inplace=True)
df.drop(df[df["elapsed_days"] == 0].index, inplace=True)
df["i"] = df.groupby("card_id").cumcount() + 1
df["y"] = df["rating"].map(lambda x: {1: 0, 2: 1, 3: 1, 4: 1}[x])
df = df[(df["elapsed_days"] > 0) & (df["i"] == 2)].sort_values(by=["review_th"])
length = len(df)
df_first_half = df.iloc[:length // 2]
df_second_half = df.iloc[length // 2:]
if df_first_half["rating"].nunique() == 2 and df_second_half["rating"].nunique() == 4:
print(user_id)
return user_id
The |
Ok, but you haven't done this
|
That's not what I said, though
|
Nice. Now I want you to do what I described above:
The key idea is that by using S0 from the first half we can check how well it fits the second half. |
Man... |
@L-M-Sherlock I have a better idea
I'll fine-tune w1 and w2 by removing 1-2 S0 values and filling them back in using the formula with w1 and w2, and then minimizing MAPE |
This is just to keep track of stuff
Add sibling information in a way that FSRS can work with. I need 3 modifications of Anki 10k #136 (comment), https://discord.com/channels/368267295601983490/1282005522513530952/1320698604771348570Done ✅During testing, filter out same-day reviews using delta_t in days, but for calculations keep delta_t in seconds. https://forums.ankiweb.net/t/due-column-changing-days-from-whole-numbers-to-decimals-in-scheduling/52213/53?u=expertiumDone ✅
Fine-tune the formula for interpolating missing S0: https://discord.com/channels/368267295601983490/1282005522513530952/1319714323680989256❌Benchmark updating D before SDone ✅Benchmark setting weights of outliers to 0: https://discord.com/channels/368267295601983490/1282005522513530952/1320670294188363778❌Benchmark FSRS v1 and FSRS v2Done ✅The text was updated successfully, but these errors were encountered: