How does Anime Hint work: Difference between revisions

From AniDB
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
{{TOCright}}
{{eyecatch|Note|The '''Anime Hint''' feature has been disabled for now due to the high amount of server load it produces.
{{eyecatch|Note|The '''Anime Hint''' feature has been disabled for now due to the high amount of server load it produces.
We will hopefully be able to provide a new version which is not as heavy on the server one day.
We will hopefully be able to provide a new version which is not as heavy on the server one day.
Sorry.}}{{TOCright}}
Sorry.}}


The [[Anime Hint|anime hint]] page tries to get a list of possible anime recommendations by first comparing all YOUR anime votes with the anime votes of all other AniDB users. This is used to create a weight (or score) for each user in relation to you.<br>
The [[Anime Hint|anime hint]] page tries to get a list of possible anime recommendations by first comparing all YOUR anime votes with the anime votes of all other AniDB users. This is used to create a weight (or score) for each user in relation to you.


==Step #1, Find Similar Users and Assign a Relative Weight==  
==Step #1, Find Similar Users and Assign a Relative Weight==  
[[image:user_options.gif]]<br>
[[image:user_options.gif]]<br>
First a list is made of all the anime with your votes. Temporary and permanent votes are treated the same (if somehow there are multiple votes on an anime the permanent is taken).<br>
First a list is made of all the anime with your votes. Temporary and permanent votes are treated the same (if somehow there are multiple votes on an anime the permanent is taken).


Next a list of all users that have at least 50 [permanent?] votes for anime, 500 anime in their MyList and have a permanent vote for any anime in your vote list is made. Temporary votes are not used. Note, although both you and another user have voted for at least 30-50 anime, they may still show up in this list with only 1 anime in common.<br>
Next a list of all users that have at least 50 [permanent?] votes for anime, 500 anime in their MyList and have a permanent vote for any anime in your vote list is made. Temporary votes are not used. Note, although both you and another user have voted for at least 30-50 anime, they may still show up in this list with only 1 anime in common.


A weight is created for each of these users in this list. The weight is calculated by taking the list of anime that you have in common for that user, and calculating the difference between your permanent or temporary vote and their permanent vote, and assigning a value for that difference. These values are then added up to create the users weight. The lookup table used to determine the value are listed below and depend on if you chose a ‘strict’ or ‘loose’ weight style (default is ‘strict’).<br>
A weight is created for each of these users in this list. The weight is calculated by taking the list of anime that you have in common for that user, and calculating the difference between your permanent or temporary vote and their permanent vote, and assigning a value for that difference. These values are then added up to create the users weight. The lookup table used to determine the value are listed below and depend on if you chose a ‘strict’ or ‘loose’ weight style (default is ‘strict’).


Here is the weight style lookup table.<br>
Here is the weight style lookup table.
<pre>
<pre>
strict:  
strict:  
Line 24: Line 26:
</pre>
</pre>


For instance if you voted 10 on anime1, 9 on anime2 and 7 on anime3 and another user voted 9 on anime1, 9 on anime2 and 4 on anime3, the weight on the strict style would be 5 + 40 – 40 = 5.<br>
For instance if you voted 10 on anime1, 9 on anime2 and 7 on anime3 and another user voted 9 on anime1, 9 on anime2 and 4 on anime3, the weight on the strict style would be 5 + 40 – 40 = 5.


After the weights are calculated then all of the users with a score less than the min. weight (default is 100) you specify are filtered out.<br>
After the weights are calculated then all of the users with a score less than the min. weight (default is 100) you specify are filtered out.


==Step #2, Find Recommended Anime==
==Step #2, Find Recommended Anime==
[[image:anime_options.gif]]<br>
[[image:anime_options.gif]]<br>
Using the final list of users, now a list of anime is created.<br>
Using the final list of users, now a list of anime is created.


The initial list is all anime the list of users voted on with a vote >= min. vote (default = 3, old logic was hard coded to 8) specified by the user. This is a change from before, the original idea was just to get a list of anime that had high votes, and use the following logic to determine the relative ranking of these anime. The issue with this is it ignores the low votes of users that have similar tastes, so an anime with a few users that voted high and many users that vote low would still get recommended. The min. value remains so that people can use the old logic, if desired, and because many users believe that extreme votes should be filtered out.<br>
The initial list is all anime the list of users voted on with a vote >= min. vote (default = 3, old logic was hard coded to 8) specified by the user. This is a change from before, the original idea was just to get a list of anime that had high votes, and use the following logic to determine the relative ranking of these anime. The issue with this is it ignores the low votes of users that have similar tastes, so an anime with a few users that voted high and many users that vote low would still get recommended. The min. value remains so that people can use the old logic, if desired, and because many users believe that extreme votes should be filtered out.


Now a score is created for each anime by taking the sum of (user weight*((vote-rec. vote)/5)) for every user that voted for that anime. Where rec. vote (default 8, old logic was hard coded to 5) is the recommended vote level. What this does is make votes the recommended vote level the point at which higher votes will give an anime a higher score, and lower votes will lower the score of an anime.<br>
Now a score is created for each anime by taking the sum of (user weight*((vote-rec. vote)/5)) for every user that voted for that anime. Where rec. vote (default 8, old logic was hard coded to 5) is the recommended vote level. What this does is make votes the recommended vote level the point at which higher votes will give an anime a higher score, and lower votes will lower the score of an anime.


For instance, if 3 users are voting on the same anime, user1 has a weight of 200 and a vote of 5, user2 has a weight of 100 and a vote of 9 and user3 has a weight of 100 and a vote of 10, the score is (200*((5-8)/5)) + (100*((9-8)/5) + (100*((10-8)/5) = 200*(-.6) + 100*.2 + 100*.4 = -120 + 20 + 40 = -60. Since the user that had the closest match with you voted fairly low on the anime, the overall score is low even though two other users recommended it. Lowering the rec. vote value diminishes the impact low votes have on the overall score.<br>
For instance, if 3 users are voting on the same anime, user1 has a weight of 200 and a vote of 5, user2 has a weight of 100 and a vote of 9 and user3 has a weight of 100 and a vote of 10, the score is (200*((5-8)/5)) + (100*((9-8)/5) + (100*((10-8)/5) = 200*(-.6) + 100*.2 + 100*.4 = -120 + 20 + 40 = -60. Since the user that had the closest match with you voted fairly low on the anime, the overall score is low even though two other users recommended it. Lowering the rec. vote value diminishes the impact low votes have on the overall score.


Now the scores have been calculated, an averaging scheme is applied. This makes the scores less dependant on the number of users that have voted on an anime, otherwise an anime with a lot of moderate votes can outweigh an anime with fewer very high votes. The following formula is used to average the scores, animescore = score/(avg. adjustment + numberofvotes*avg. scale). Avg. adjustment (default 5) is used to balance out the average somewhat, this prevents an anime with a single 10 vote (although highly rated, if not many users have voted for it there must be a reason) to outweigh an anime with a few high votes. Anime with low votes will have very low scores, but anime with more votes will not be affected as much. Avg. scale (default 0.5) is how much of an average you want, a value of 1 is a strict average and a value of 0 does not average.<br>
Now the scores have been calculated, an averaging scheme is applied. This makes the scores less dependant on the number of users that have voted on an anime, otherwise an anime with a lot of moderate votes can outweigh an anime with fewer very high votes. The following formula is used to average the scores, animescore = score/(avg. adjustment + numberofvotes*avg. scale). Avg. adjustment (default 5) is used to balance out the average somewhat, this prevents an anime with a single 10 vote (although highly rated, if not many users have voted for it there must be a reason) to outweigh an anime with a few high votes. Anime with low votes will have very low scores, but anime with more votes will not be affected as much. Avg. scale (default 0.5) is how much of an average you want, a value of 1 is a strict average and a value of 0 does not average.


Below are examples of how the averages act. Assume that we have a scenario with anime whose average score would be 100 (regardless of the number of users). The following tables show the affects of the average scale and average adjustment.<br>
Below are examples of how the averages act. Assume that we have a scenario with anime whose average score would be 100 (regardless of the number of users). The following tables show the affects of the average scale and average adjustment.<br>
<pre>
<pre>
Average Adjustment = 1
Average Adjustment = 1
Line 69: Line 71:
1.00    9    17    23    33    50    60    67    75    80    83    88    91
1.00    9    17    23    33    50    60    67    75    80    83    88    91
</pre>  
</pre>  
The default values, Average Adjustment = 5 and Average Scale = 0.5 have results in the middle of the middle table. Anime with only a couple of votes are significantly reduced, anime with 5-9 votes would get slightly reduced, anime with more than 10 votes get somewhat higher scores. This has the benefits of averaging, without allowing a just few votes to put over-rank a particular anime.<br>
The default values, Average Adjustment = 5 and Average Scale = 0.5 have results in the middle of the middle table. Anime with only a couple of votes are significantly reduced, anime with 5-9 votes would get slightly reduced, anime with more than 10 votes get somewhat higher scores. This has the benefits of averaging, without allowing a just few votes to put over-rank a particular anime.


Note: You cannot assign 0 to both avg. adjustment and avg. scale at the same time. A strict average would set avg. adjustment to 0 and avg. scale to 1. To have no averaging set avg. adjustment to 1 and avg. scale to 0.<br>
{{eyecatch|Note|You cannot assign 0 to both avg. adjustment and avg. scale at the same time. A strict average would set avg. adjustment to 0 and avg. scale to 1. To have no averaging set avg. adjustment to 1 and avg. scale to 0.}}


==Step #3, Filter Anime==
==Step #3, Filter Anime==
[[image:Filter_options.png]]<br>
[[image:Filter_options.png]]<br>
Now that a list of scores has been created, these are now filtered based on the criteria chosen.<br>
Now that a list of scores has been created, these are now filtered based on the criteria chosen.


The resulting list is shown ordered by score.<br>
The resulting list is shown ordered by score.


<small>[Note, technically step 3 actually happens before step 2 for performance reasons, but it is easier to explain it this way.]</small>
{{small90|[Note, technically step 3 actually happens before step 2 for performance reasons, but it is easier to explain it this way.]}}


==Weblinks==
==Weblinks==
* {{anidblink|hint2|Anime Hint}}
* {{AniDBLink|hint2|Anime Hint}}


[[Category:Misc]]
[[Category:Misc]]

Latest revision as of 20:37, 15 May 2009

Note The Anime Hint feature has been disabled for now due to the high amount of server load it produces.

We will hopefully be able to provide a new version which is not as heavy on the server one day. Sorry.

The anime hint page tries to get a list of possible anime recommendations by first comparing all YOUR anime votes with the anime votes of all other AniDB users. This is used to create a weight (or score) for each user in relation to you.

Step #1, Find Similar Users and Assign a Relative Weight


First a list is made of all the anime with your votes. Temporary and permanent votes are treated the same (if somehow there are multiple votes on an anime the permanent is taken).

Next a list of all users that have at least 50 [permanent?] votes for anime, 500 anime in their MyList and have a permanent vote for any anime in your vote list is made. Temporary votes are not used. Note, although both you and another user have voted for at least 30-50 anime, they may still show up in this list with only 1 anime in common.

A weight is created for each of these users in this list. The weight is calculated by taking the list of anime that you have in common for that user, and calculating the difference between your permanent or temporary vote and their permanent vote, and assigning a value for that difference. These values are then added up to create the users weight. The lookup table used to determine the value are listed below and depend on if you chose a ‘strict’ or ‘loose’ weight style (default is ‘strict’).

Here is the weight style lookup table.

strict: 
0 => 40, 1 => 5, 2 => -20, 3 => -40, 4 => -60, 5 => -60, 6 => -60, 
7 => -60, 8 => -60, 9 => -60, 

loose: 
0 => 10, 1 => 1, 2 => -1, 3 => -2, 4 => -4, 5 => -6, 6 => -8, 
7 => -10, 8 => -12, 9 => -15

For instance if you voted 10 on anime1, 9 on anime2 and 7 on anime3 and another user voted 9 on anime1, 9 on anime2 and 4 on anime3, the weight on the strict style would be 5 + 40 – 40 = 5.

After the weights are calculated then all of the users with a score less than the min. weight (default is 100) you specify are filtered out.

Step #2, Find Recommended Anime


Using the final list of users, now a list of anime is created.

The initial list is all anime the list of users voted on with a vote >= min. vote (default = 3, old logic was hard coded to 8) specified by the user. This is a change from before, the original idea was just to get a list of anime that had high votes, and use the following logic to determine the relative ranking of these anime. The issue with this is it ignores the low votes of users that have similar tastes, so an anime with a few users that voted high and many users that vote low would still get recommended. The min. value remains so that people can use the old logic, if desired, and because many users believe that extreme votes should be filtered out.

Now a score is created for each anime by taking the sum of (user weight*((vote-rec. vote)/5)) for every user that voted for that anime. Where rec. vote (default 8, old logic was hard coded to 5) is the recommended vote level. What this does is make votes the recommended vote level the point at which higher votes will give an anime a higher score, and lower votes will lower the score of an anime.

For instance, if 3 users are voting on the same anime, user1 has a weight of 200 and a vote of 5, user2 has a weight of 100 and a vote of 9 and user3 has a weight of 100 and a vote of 10, the score is (200*((5-8)/5)) + (100*((9-8)/5) + (100*((10-8)/5) = 200*(-.6) + 100*.2 + 100*.4 = -120 + 20 + 40 = -60. Since the user that had the closest match with you voted fairly low on the anime, the overall score is low even though two other users recommended it. Lowering the rec. vote value diminishes the impact low votes have on the overall score.

Now the scores have been calculated, an averaging scheme is applied. This makes the scores less dependant on the number of users that have voted on an anime, otherwise an anime with a lot of moderate votes can outweigh an anime with fewer very high votes. The following formula is used to average the scores, animescore = score/(avg. adjustment + numberofvotes*avg. scale). Avg. adjustment (default 5) is used to balance out the average somewhat, this prevents an anime with a single 10 vote (although highly rated, if not many users have voted for it there must be a reason) to outweigh an anime with a few high votes. Anime with low votes will have very low scores, but anime with more votes will not be affected as much. Avg. scale (default 0.5) is how much of an average you want, a value of 1 is a strict average and a value of 0 does not average.

Below are examples of how the averages act. Assume that we have a scenario with anime whose average score would be 100 (regardless of the number of users). The following tables show the affects of the average scale and average adjustment.

Average Adjustment = 1
         1     2     3     5    10    15    20    30    40    50    75    100
      ----  ----  ----  ----  ----  ----  ----  ----  ----  ----  ----  -----
0.00   100   200   300   500  1000  1500  2000  3000  4000  5000  7500  10000
0.25    80   133   171   222   286   316   333   353   364   370   380    385
0.50    67   100   120   143   167   176   182   188   190   192   195    196
0.75    57    80    92   105   118   122   125   128   129   130   131    132
1.00    50    67    75    83    91    94    95    97    98    98    99     99

Average Adjustment = 5                                            
         1     2     3     5    10    15    20    30    40    50    75    100
      ----  ----  ----  ----  ----  ----  ----  ----  ----  ----  ----  -----
0.00    20    40    60   100   200   300   400   600   800  1000  1500   2000
0.25    19    36    52    80   133   171   200   240   267   286   316    333
0.50    18    33    46    67   100   120   133   150   160   167   176    182
0.75    17    31    41    57    80    92   100   109   114   118   122    125
1.00    17    29    38    50    67    75    80    86    89    91    94     95

Average Adjustment = 10                                            
         1     2     3     5    10    15    20    30    40    50    75    100
      ----  ----  ----  ----  ----  ----  ----  ----  ----  ----  ----  -----
0.00    10    20    30    50   100   150   200   300   400   500   750   1000
0.25    10    19    28    44    80   109   133   171   200   222   261    286
0.50    10    18    26    40    67    86   100   120   133   143   158    167
0.75     9    17    24    36    57    71    80    92   100   105   113    118
1.00     9    17    23    33    50    60    67    75    80    83    88     91

The default values, Average Adjustment = 5 and Average Scale = 0.5 have results in the middle of the middle table. Anime with only a couple of votes are significantly reduced, anime with 5-9 votes would get slightly reduced, anime with more than 10 votes get somewhat higher scores. This has the benefits of averaging, without allowing a just few votes to put over-rank a particular anime.

Note You cannot assign 0 to both avg. adjustment and avg. scale at the same time. A strict average would set avg. adjustment to 0 and avg. scale to 1. To have no averaging set avg. adjustment to 1 and avg. scale to 0.

Step #3, Filter Anime


Now that a list of scores has been created, these are now filtered based on the criteria chosen.

The resulting list is shown ordered by score.

[Note, technically step 3 actually happens before step 2 for performance reasons, but it is easier to explain it this way.]

Weblinks