tag:danbooru.me,2005:/forum_topics/11864 Tags vs score: Analysis 2015-07-20T16:22:59-04:00 tag:danbooru.me,2005:ForumPost/106670 2015-07-20T16:22:59-04:00 2015-07-20T20:53:02-04:00 @r0d3n7z: Okay, I finally got around to mocking up my... <p>Okay, I finally got around to mocking up my ideas for visually displaying the percentile-vs-peers data. I'm sure there's a bunch of js/css improvements that could be done to improve ui usability, jazz it up further etc but this should demonstrate the most important things for now. Also, I just copied the same data three times because I'm lazy. This uses some of the preliminary data from an unspecified user, but I also made up some of the numbers in there (because they weren't in Type-kun's aggregated data) so please don't actually draw conclusions from this.</p><p>Here is the mockup/demo: <a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="http://jsfiddle.net/qcp8ht1p/embedded/result/">http://jsfiddle.net/qcp8ht1p/embedded/result/</a></p><p>-</p><p><strong>How to use/read/interpret</strong></p><p><u>In initial view</u></p><ul> <li>list of users, summary statistics</li> <li>number of approvals (for context)</li> <li>"average" quality - harmonic mean of percentile-vs-<a class="dtext-link dtext-post-search-link" href="/posts?tags=%2A">*</a> of all posts</li> <li>the score that it corresponds to, and the percentile range of that score</li> </ul><ul> <li>summary view for by-rating / by-comic</li> <ul> <li>narrow black bar is the overall average quality from before (62% in this case)</li> <li>horizontal bars for each peer group:</li> <ul> <li> <a class="dtext-link dtext-post-search-link" href="/posts?tags=rating%3As">rating:s</a>, <a class="dtext-link dtext-post-search-link" href="/posts?tags=rating%3Aq">rating:q</a>, <a class="dtext-link dtext-post-search-link" href="/posts?tags=rating%3Ae">rating:e</a> </li> <li> <a class="dtext-link dtext-post-search-link" href="/posts?tags=comic">comic</a>, <a class="dtext-link dtext-post-search-link" href="/posts?tags=-comic">-comic</a> </li> </ul> <li>pips (fixed @ 10px wide) positioned according to average quality within the peer group</li> <ul> <li>color corresponds to value 0~100%</li> <li>opacity corresponds to number of posts (e.g. number of <a class="dtext-link dtext-post-search-link" href="/posts?tags=rating%3As">rating:s</a> as a fraction of <a class="dtext-link dtext-post-search-link" href="/posts?tags=%2A">*</a>)</li> <li>because opacity may be very low, the pips have solid left/right borders for visibility</li> </ul> <li>mouseover horizontal bars will display detailed information in tooltip</li> </ul> </ul><ul> <li>summary view for by-copyright</li> <ul> <li>twenty colored boxes corresponding to 5% intervals</li> <li>opacity increases for number of posts falling into that interval, when evaluated against copyright peer groups</li> <li>mouseover each box will display detailed information in tooltip</li> <ul> <li>total number of posts in that interval and % as fraction of <a class="dtext-link dtext-post-search-link" href="/posts?tags=%2A">*</a> </li> <li>information about each copyright peer group contributing to that bucket</li> </ul> <li>using fixed intervals is not ideal, but I couldn't think of anything else better for a fast summary</li> </ul> </ul><p><u>Clicking the "+" beside the username expands detail view</u></p><ul> <li>first item is a repeat of data for <a class="dtext-link dtext-post-search-link" href="/posts?tags=%2A">*</a>, but now with a visual representation</li> <ul> <li>the average quality is displayed as a pip along a horizontal bar; number is shown</li> <li>percentile range is displayed as the colored section of the bar behind the pip (this will be more evident in later examples) </li> <li>colors correspond to value</li> <li>mouseover bar for details in tooltip</li> <li>yes, I'll admit that this part can be incorporated into the user summary row instead of duplicating the same information, but this is just how it turned out as I hacked it together. (Also, easier to ensure vertical alignment of visuals this way...)</li> </ul> <li>breakdown into further peer groups: expanded by clicking on the small headers</li> <ul><li>I'm not too happy that the small headers still take up so much space, but this will do to illustrate the point for now</li></ul> </ul><p><u>Expanded peer group details</u></p><ul> <li>same idea; also, the bars line up vertically for ease of comparison</li> <li>the number of posts of the user within the peer group is shown, along with the % as fraction of the parent peer group</li> <li>breakdown is always:</li> <ul> <li>rating: s/q/e</li> <li>comic: comic, -comic; each broken down by rating</li> <li>copyright: ordered by post count; each broken down by rating, comic (and comic/rating)</li> <li>some of the data is missing in this example, but you get the idea re: how you can drill down for more detail</li> </ul> </ul><p>.<br>[edit]</p><p>This might be stating the obvious, but here's a note about evaluating an "average percentile" vs the "percentile range" that it falls into for that peer group.</p><ul> <li>suppose we have a hypothetical tag (<a class="dtext-link dtext-wiki-link dtext-wiki-does-not-exist dtext-tag-does-not-exist" href="/wiki_pages/foobar" title="This wiki page does not have a tag">foobar</a> or whatever) that is composed entirely of:</li> <ul> <li>25% of posts have score:0 - 25th percentile</li> <li>50% of posts have score:1 - 75th percentile</li> <li>25% of posts have score:2 - 100th percentile</li> </ul> <li>here's what would happen to someone's average percentile:</li> <ul> <li>if they uploaded/approved only posts that got score:1, their average percentile would be exactly 75, and fall in the 25~75 range</li> <li>if mostly score:1 and a bit of score:2, it would be in the lower part of the 75~100 range</li> <li>if mostly score:1 and a bit of score:0, in the upper part of 25~75</li> <li>an average percentile of 50 or less, falling in mid or lower part of 25~75, actually means there are more score:0 posts than score:1 posts from them!</li> </ul> </ul><p>[/edit]</p><p>-</p><p><strong>Other things that could be done</strong></p><ul> <li>information that is already on the existing janitor trial report can obviously be included</li> <li>current report lists quartile and median scores, we could also have quartile and median percentile-vs-peers for each peer group</li> <li>the horizontal bar visualization for each peer group can be turned into a vertical bar...</li> <ul> <li>if you run the reports, say, monthly or fortnightly, you could show change over time in a peer group by displaying the vertical bars from left to right</li> <ul><li>remember: it's important to include the post count for context.</li></ul> </ul> </ul><p>-</p><p><strong>If you want to muck around with it</strong><br><a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="http://jsfiddle.net/qcp8ht1p/">http://jsfiddle.net/qcp8ht1p/</a><br>(sorry for the horrible mess, I just sorta hacked it together)</p> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106537 2015-07-18T02:41:41-04:00 2015-07-18T02:41:41-04:00 @r0d3n7z: Here's a more visual look at the score... <p>Here's a more visual look at the score distributions by rating and by copyright, using percent-stack bars:</p><p><a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="https://www.dropbox.com/s/jtmw9gdmjopz7ak/score_percent_stack.png?dl=0">https://www.dropbox.com/s/jtmw9gdmjopz7ak/score_percent_stack.png?dl=0</a></p><p>It's color-coded by score. I left the high/low extremes in shades of gray.</p><p>-</p><p>Actually I take back what I said about some tags being useless for analysis because they don't have enough variance in score. They're still informative, insofar as it tells us that posts with those tags tend to have lower scores than in general, so an approver/uploader shouldn't be penalized for low scores if such tags were the cause.</p><p>Inasmuch as it'd be fantastic if everything was distributed like <a class="dtext-link dtext-wiki-link tag-type-3" href="/wiki_pages/love_live%21_school_idol_project">love_live!_school_idol_project</a> -- huge range with nice, almost even distribution in score -- the fact is that most tags, and all posts in general, are distributed such that it is really hard to use score as a basis to distinguish between a) posts that are just mediocre or slightly subpar versus b) outright bad. score:0 usually (with notable exceptions) places around the 15th to 20th percentile -- so I don't think most folks would be comfortable concluding across the board that posts with score:0 are terribad and shouldn't deserve to be on the site.</p><p>Posts with negative scores are generally the bottom 1% to 5%, but they're too rare to be truly useful. I don't think users care too much about going out of their way to vote down posts that they don't like, and besides, you can just blacklist stuff that you don't want to see anyway.</p><p>So the proposed percentile-vs-peers approach probably isn't going to help us do a much better job of detecting low quality, compared to what we have at the moment.</p><p>What the distribution data is truly useful for, I think, is refining how we set the bar for good- to high-quality posts. Right now, the janitor trial report uses a score:3+ threshold, presumably because 3 is the median post score. It's asking, "what fraction of the approved posts are <em>kinda-sorta</em> better than at least half of all other posts". But it's clear that depending on rating/copyright, the threshold for "half of posts" could be at anything from score:0 (jojo) to score:6 (lovelive).</p><p>This is where percentile-vs-peers would really shine, because a percentile of over 50~60% <em>after</em> taking into account inflated/deflated post scores would be a lot more meaningful than a single flat cutoff across the board.</p><p>I have to rethink my idea for graphical visualization, though, because it would have displayed using fixed width intervals, but I'm now convinced that that would not be a good representation.</p> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106533 2015-07-18T01:17:48-04:00 2015-07-18T01:17:48-04:00 @r0d3n7z: > lkjh098 said: > added uploaders to my... <blockquote><p>lkjh098 said:<br>added uploaders to my analysis<br>these are the expected score difference after normalizing for tags and rating</p></blockquote><p>So, it's about as good of a "content-agnostic, pure-artistic-quality-base" measure as we might be able to get with a fairly simple technical approach? As far as attempting to compensate for certain copyrights or tags that inflate/deflate post scores goes.</p><p>Knowing that the median post score across all posts on the site is 3, those score differences look pretty okay for the most part. +/-2 basically puts most uploads in the <a class="dtext-link dtext-post-search-link" href="/posts?tags=score%3A1..5">score:1..5</a> range which is pretty much within the "normal/acceptable" range, with -2 <em>just barely maybe</em> borderline.<br>[table][thead][tr][td]score[/td][td]spans these percentiles[/td][/tr][/thead]<br>[tr][td]1[/td][td]16.7 ~ 30.9[/td][/tr]<br>[tr][td]2[/td][td]30.9 ~ 43.8[/td][/tr]<br>[tr][td]3[/td][td]43.8 ~ 54.8[/td][/tr]<br>[tr][td]4[/td][td]54.8 ~ 63.7[/td][/tr]<br>[tr][td]5[/td][td]63.7 ~ 70.9[/td][/tr]<br>[/table]</p> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106531 2015-07-18T00:09:26-04:00 2015-07-18T00:09:26-04:00 @lkjh098: I added uploaders to my analysis and ran it... <p>I added uploaders to my analysis and ran it over 60 days of data. I've removed the names for anonymity. Tags and rating are still included, so these are the expected score difference after normalizing for those. These may not be very informative if there are strong enough correlations between user and tags (for example, the two users who uploaded over 80% of the <a class="dtext-link dtext-wiki-link tag-type-3" href="/wiki_pages/jojo_no_kimyou_na_bouken">jojo_no_kimyou_na_bouken</a> posts got terrible score factors).</p><div class="expandable"> <div class="expandable-header"><input type="button" value="Show" class="expandable-button"></div> <div class="expandable-content"><table class="striped"> <thead><tr> <td>Level</td> <td>Score factor</td> </tr></thead> <tr> <td>Builder</td> <td>0.651</td> </tr> <tr> <td>Builder</td> <td>0.381</td> </tr> <tr> <td>Builder</td> <td>0.349</td> </tr> <tr> <td>Builder</td> <td>0.272</td> </tr> <tr> <td>Builder</td> <td>-0.119</td> </tr> <tr> <td>Builder</td> <td>-0.124</td> </tr> <tr> <td>Builder</td> <td>-0.558</td> </tr> <tr> <td>Builder</td> <td>-0.629</td> </tr> <tr> <td>Builder</td> <td>-0.828</td> </tr> <tr> <td>Builder</td> <td>-0.959</td> </tr> <tr> <td>Builder</td> <td>-1.635</td> </tr> <tr> <td>Contributor</td> <td>1.915</td> </tr> <tr> <td>Contributor</td> <td>1.868</td> </tr> <tr> <td>Contributor</td> <td>1.856</td> </tr> <tr> <td>Contributor</td> <td>1.554</td> </tr> <tr> <td>Contributor</td> <td>1.47</td> </tr> <tr> <td>Contributor</td> <td>1.464</td> </tr> <tr> <td>Contributor</td> <td>1.346</td> </tr> <tr> <td>Contributor</td> <td>1.322</td> </tr> <tr> <td>Contributor</td> <td>1.305</td> </tr> <tr> <td>Contributor</td> <td>1.207</td> </tr> <tr> <td>Contributor</td> <td>1.191</td> </tr> <tr> <td>Contributor</td> <td>1.149</td> </tr> <tr> <td>Contributor</td> <td>1.005</td> </tr> <tr> <td>Contributor</td> <td>0.969</td> </tr> <tr> <td>Contributor</td> <td>0.929</td> </tr> <tr> <td>Contributor</td> <td>0.819</td> </tr> <tr> <td>Contributor</td> <td>0.769</td> </tr> <tr> <td>Contributor</td> <td>0.752</td> </tr> <tr> <td>Contributor</td> <td>0.675</td> </tr> <tr> <td>Contributor</td> <td>0.635</td> </tr> <tr> <td>Contributor</td> <td>0.604</td> </tr> <tr> <td>Contributor</td> <td>0.518</td> </tr> <tr> <td>Contributor</td> <td>0.487</td> </tr> <tr> <td>Contributor</td> <td>0.366</td> </tr> <tr> <td>Contributor</td> <td>0.362</td> </tr> <tr> <td>Contributor</td> <td>0.211</td> </tr> <tr> <td>Contributor</td> <td>0.085</td> </tr> <tr> <td>Contributor</td> <td>0.054</td> </tr> <tr> <td>Contributor</td> <td>0.051</td> </tr> <tr> <td>Contributor</td> <td>-0.019</td> </tr> <tr> <td>Contributor</td> <td>-0.074</td> </tr> <tr> <td>Contributor</td> <td>-0.08</td> </tr> <tr> <td>Contributor</td> <td>-0.282</td> </tr> <tr> <td>Contributor</td> <td>-0.291</td> </tr> <tr> <td>Contributor</td> <td>-0.328</td> </tr> <tr> <td>Contributor</td> <td>-0.35</td> </tr> <tr> <td>Contributor</td> <td>-0.391</td> </tr> <tr> <td>Contributor</td> <td>-0.612</td> </tr> <tr> <td>Contributor</td> <td>-0.644</td> </tr> <tr> <td>Contributor</td> <td>-0.801</td> </tr> <tr> <td>Contributor</td> <td>-0.882</td> </tr> <tr> <td>Contributor</td> <td>-0.902</td> </tr> <tr> <td>Contributor</td> <td>-0.959</td> </tr> <tr> <td>Contributor</td> <td>-0.96</td> </tr> <tr> <td>Contributor</td> <td>-1.074</td> </tr> <tr> <td>Gold</td> <td>0.236</td> </tr> <tr> <td>Gold</td> <td>-0.065</td> </tr> <tr> <td>Gold</td> <td>-0.792</td> </tr> <tr> <td>Gold</td> <td>-0.945</td> </tr> <tr> <td>Gold</td> <td>-1.014</td> </tr> <tr> <td>Gold</td> <td>-1.116</td> </tr> <tr> <td>Gold</td> <td>-2.399</td> </tr> <tr> <td>Janitor</td> <td>1.921</td> </tr> <tr> <td>Janitor</td> <td>1.631</td> </tr> <tr> <td>Janitor</td> <td>0.73</td> </tr> <tr> <td>Member</td> <td>0.694</td> </tr> <tr> <td>Member</td> <td>0.339</td> </tr> <tr> <td>Member</td> <td>-0.423</td> </tr> <tr> <td>Member</td> <td>-0.668</td> </tr> <tr> <td>Member</td> <td>-0.674</td> </tr> <tr> <td>Member</td> <td>-0.721</td> </tr> <tr> <td>Member</td> <td>-0.725</td> </tr> <tr> <td>Member</td> <td>-0.789</td> </tr> <tr> <td>Member</td> <td>-0.823</td> </tr> <tr> <td>Member</td> <td>-1.087</td> </tr> <tr> <td>Member</td> <td>-1.405</td> </tr> <tr> <td>Member</td> <td>-1.552</td> </tr> <tr> <td>Member</td> <td>-1.599</td> </tr> <tr> <td>Moderator</td> <td>2.039</td> </tr> <tr> <td>Moderator</td> <td>1.177</td> </tr> <tr> <td>Moderator</td> <td>1.156</td> </tr> <tr> <td>Moderator</td> <td>0.882</td> </tr> <tr> <td>Platinum</td> <td>-0.532</td> </tr> </table></div> </div> lkjh098 /users/372231 tag:danbooru.me,2005:ForumPost/106451 2015-07-17T00:26:56-04:00 2015-07-17T00:27:23-04:00 @r0d3n7z: > CodeKyuubi said: > I don't think I'm... <blockquote><p>CodeKyuubi said:<br>I don't think I'm understanding the graphs, unless you meant less than or equal to (&lt;=) rather than greater than or equal to (&gt;=)?</p></blockquote><p>Yup I caught that immediately after posting; it's been fixed - try refreshing.</p> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106450 2015-07-17T00:13:20-04:00 2015-07-17T00:13:20-04:00 @CodeKyuubi: > r0d3n7z said: > > colored histogramI don't... <blockquote> <p>r0d3n7z said:</p> <p>colored histogram</p> </blockquote><p>I don't think I'm understanding the graphs, unless you meant less than or equal to (&lt;=) rather than greater than or equal to (&gt;=)?</p> CodeKyuubi /users/81291 tag:danbooru.me,2005:ForumPost/106444 2015-07-17T00:01:09-04:00 2015-07-17T00:26:26-04:00 @r0d3n7z: Derived from score_histogram.csv, here are... <p>Derived from score_histogram.csv, here are postscore-to-percentile lookup tables for, all posts, posts grouped by rating, and posts grouped by copyright. See different sheets.</p><p><a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="https://www.dropbox.com/s/5gaf1x0uopg6t1o/score_percentile_lookup_condensed.xls?dl=0">https://www.dropbox.com/s/5gaf1x0uopg6t1o/score_percentile_lookup_condensed.xls?dl=0</a><br>(Edit: stupid mistakes in earlier version have been fixed)</p><p>Main part of the data are:</p><ul> <li>peer group</li> <li>cumulative count</li> <li>cumulative percentage (percentile)</li> <li>post score that the count/percentile corresponds to</li> </ul><p>I did a little bit of work to merge together scores that had too few posts to be significant.</p><ul> <li>%diff is the difference in percentile from one row to the next</li> <li>these are color coded at thresholds of &gt;=0.5% (red), &gt;=1% (yellow) and &gt;=5% (green)</li> <li>due to the long tails on either side of the histogram, there were originally many rows where %diff&lt;0.5%</li> <li>moving outward from the center, whenever I encountered a row that had %diff&lt;0.5%, I would merge it with the next one, etc until the threshold of 0.5% was reached (or until I run out of rows to merge with)</li> <li>the region of consecutive post scores colored green are rows that were kept intact, the other rows were created by merging.</li> </ul><p>-</p><p><strong>What this suggests</strong></p><ul> <li>Again, we ought to be be cautious when drawing conclusions from percentiles. Particularly in the region of around 50% or less, a difference in score of just 1 will often be reflected as a percentile difference of 10~15%, or even more in some cases.</li> <ul><li>Visualization of percentile data should reflect these huge jumps where possible, to prevent people from jumping to incorrect conclusions</li></ul> <li>Rather than fixed width intervals (0~5%, 5~10%, 10~15%, etc) we should probably consider flexible brackets based on what the data shows</li> <li>Some tags are rather useless for analysis because they don't have enough variance in score. e.g.:</li> <ul> <li> <a class="dtext-link dtext-wiki-link tag-type-3" href="/wiki_pages/fate_%28series%29">fate_(series)</a> has almost a third of its posts in <a class="dtext-link dtext-post-search-link" href="/posts?tags=fate_%28series%29%20score%3A0">fate_(series) score:0</a> alone</li> <li> <a class="dtext-link dtext-wiki-link tag-type-3" href="/wiki_pages/fate%2Fzero">fate/zero</a> has 45% of its posts in <a class="dtext-link dtext-post-search-link" href="/posts?tags=fate%2Fzero%20score%3A0">fate/zero score:0</a> </li> <li> <a class="dtext-link dtext-wiki-link tag-type-3" href="/wiki_pages/jojo_no_kimyou_na_bouken">jojo_no_kimyou_na_bouken</a> is completely hopeless, 76% of its posts are <a class="dtext-link dtext-post-search-link" href="/posts?tags=jojo_no_kimyou_na_bouken%20score%3A0">jojo_no_kimyou_na_bouken score:0</a><br> </li> </ul> </ul> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106437 2015-07-16T20:17:24-04:00 2015-07-16T20:35:18-04:00 @r0d3n7z: > Type-kun said: > It's harmonic and arithmetic... <blockquote><p>Type-kun said:<br>It's harmonic and arithmetic means for favcount and score percentiles, as well as post count, per peer group per approver, for posts between Jan 1, 2015 and Jul 7, 2015. Basically, it's that approver performance report we discussed in <a class="dtext-link dtext-id-link dtext-forum-topic-id-link" href="/forum_topics/11837">topic #11837</a>, for last half-a-year.</p></blockquote><p>This is already very interesting and usable data.</p><p>Additional processing:</p><ul> <li>remove all rows with post count less than 10 (arbitrary threshold)</li> <li>tweak sort order so that within each approver, sort by:</li> <ul> <li>everything (*)</li> <li>rating</li> <li>comic?</li> <li>comic? + rating</li> <li>copyright</li> <li>copyright + rating</li> <li>copyright + comic? <strong>← <a href="/users?name=Type-kun">@Type-kun</a>, these are all missing for some reason?</strong> </li> <li>copyright + comic? + rating</li> </ul> <li>make pretty colors</li> </ul><p><a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="https://www.dropbox.com/s/mt16f31e56inai4/approver_condensed.xls?dl=0">https://www.dropbox.com/s/mt16f31e56inai4/approver_condensed.xls?dl=0</a></p><p>-</p><p>Some interesting examples:</p><p>-</p><table class="striped"><thead> <tr> <td>Approver</td> <td>Peer group</td> <td>Count</td> <td>Score percentile harmonic mean</td> <td>Score percentile arithmetic mean</td> <td>Favcount percentile harmonic mean</td> <td>Favcount percentile arithmetic mean</td>[/thead]</tr> <tr> <td>11672</td> <td>love_live!_school_idol_project</td> <td>148</td> <td>9</td> <td>23</td> <td>8</td> <td>21</td> </tr> <tr> <td>11672</td> <td>love_live!_school_idol_project rating:s</td> <td>143</td> <td>11</td> <td>24</td> <td>8</td> <td>21</td> </tr> <tr> <td>11672</td> <td>love_live!_school_idol_project comic rating:s</td> <td>95</td> <td>61</td> <td>65</td> <td>53</td> <td>57</td> </tr>[/table]<thead> <tr> <td>Approver</td> <td>Peer group</td> <td>Count</td> <td>Score percentile harmonic mean</td> <td>Score percentile arithmetic mean</td> <td>Favcount percentile harmonic mean</td> <td>Favcount percentile arithmetic mean</td>[/thead]</tr> <tr> <td>13392</td> <td>k-on!</td> <td>83</td> <td>12</td> <td>30</td> <td>6</td> <td>17</td> </tr> <tr> <td>13392</td> <td>k-on! rating:s</td> <td>82</td> <td>12</td> <td>31</td> <td>6</td> <td>18</td> </tr> <tr> <td>13392</td> <td>k-on! comic rating:s</td> <td>56</td> <td>35</td> <td>36</td> <td>21</td> <td>24</td> </tr>[/table]</thead> </thead></table> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106426 2015-07-16T18:05:16-04:00 2015-07-16T18:05:16-04:00 @r0d3n7z: > Type-kun said: > score_histogram.csvQuickly... <blockquote><p>Type-kun said:<br>score_histogram.csv</p></blockquote><p>Quickly plotted a few score histograms, they generally exhibit zipf's law behavior (albeit in both positive and negative directions)<br>...I'm not really surprised to see this, considering it's essentially a kind of rank data.</p><p>Basically, post score is the result of three processes -- each user considers:</p><ul> <li>do I like the post enough to fave it?</li> <li>do I like the post enough to vote it up?</li> <li>do I dislike the post enough to vote it down?<br> </li> </ul> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106424 2015-07-16T17:22:12-04:00 2015-07-16T17:23:08-04:00 @r0d3n7z: > CodeKyuubi said: > > Not entirely sure what... <blockquote> <p>CodeKyuubi said:</p> <p>Not entirely sure what the numbers mean. Does a harmonic mean for score percentile with a result, of say, 92, mean that the average post of x tag by y user places in the 92nd percentile of score?</p> </blockquote><p>Yes, to be precise, it places in the 92nd percentile of score compared to other posts with x tag(s)</p><p>Harmonic mean is just a different kind of "average" than the arithmetic mean, which is what is usually intended when when we say "average" (colloquially speaking). However, harmonic mean is more appropriate because we are "averaging" percentages, which are <em>rates</em>.</p><p>Harmonic mean has the benefit of rewarding consistency. Compare the following simplified examples:</p><p><strong>95%, 60%</strong><br>Arithmetic mean: 77.5%<br>Harmonic mean: 73.548%</p><p><strong>80%, 75%</strong><br>Arithmetic mean: 77.5%<br>Harmonic mean: 77.419%</p><p>If you use the arithmetic mean, the two examples are indistinguishable. Using the harmonic mean, the more consistent performer does better.</p> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106423 2015-07-16T17:10:17-04:00 2015-07-16T17:10:17-04:00 @r0d3n7z: > Type-kun said: > > Ok, math failed me on... <blockquote> <p>Type-kun said:</p> <p>Ok, math failed me on this one. I've resorted to most common meanings and calculated "percentile" as "percent of images that have lower score than this one". However, since all histograms are skewed at zero values, and for some peer groups zero is the lowest score, it's highly possible for a post to legitimately be in 0th percentile? there are no posts with scores below zero, 0/total = 0. </p> <p>It's no big deal, but then harmonic mean kicks in. If I go with wiki, it's N/(1/x1+1/x2+...+1/xN). The thing is, it's meant for <strong>positive</strong> numbers only. I learned about this the hard way - after half-an-hour of processing I got "mean percentile" of 150 zeros and three 85s to be over 4000.</p> <p>So, which one do I fix, and how exactly? :3 I can treat 0s as 1s for harmonic mean calculation, but that's not exactly correct.</p> </blockquote><p>I'd suggest treating "percentile" as "percent of images that have <strong>equal or</strong> lower score than this one". Basically, you give the post scores the benefit of the doubt by saying "this post is at least as good as x% of others" rather than having to be "strictly better than". This way, even the lowest scoring post in a peer group will have a non-zero percentile (even that one lone post with score -116 in <a class="dtext-link dtext-post-search-link" href="/posts?tags=%2A">*</a> would be at a miniscule, but non-zero, 1/2029669 = 4.92691173e-7 = 0.0000492691173th percentile)</p><p>-</p><blockquote><p>Type-kun said:<br>Will also ceil non-integer percentiles instead of floor'ing them. This way, percentile distribution will be 0 &lt; P &lt;= 100, integer, which is good for harmonic mean. I will also compute arithmetic mean at the same time, just to check out how well is that working.</p></blockquote><p>Hang on... why would integers be any better for harmonic mean? It's all numbers anyway.</p><p>Percentages are rates, i.e. fractions. e.g. 86% should be treated as 0.86. Now, numerically it doesn't make a difference to the result whether you plug 86 or 0.86 into the harmonic mean computation, but when you use ceil, that's consistently rounding up nearly all of your numbers -- you're not likely to get perfect integers anyway.</p><p>... actually, never mind, I paused to think about it, and this probably just means the final output is at worst going to be inflated by up to 1%, which is tolerable, I think. We're not doing mission-critical science here. <a class="dtext-link dtext-post-search-link" href="/posts?tags=%3Ap">:p</a></p><p>-</p><blockquote><p>Type-kun said:<br>Also, regarding peer groups, shouldn't we also have groups with negated tags? Specifically, <a class="dtext-link dtext-post-search-link" href="/posts?tags=comic">comic</a> tag, no other general tags are counted in currently. There would be groups like <a class="dtext-link dtext-post-search-link" href="/posts?tags=rating%3As%20-comic">rating:s -comic</a> then.</p></blockquote><p>Sure, in cases where it makes sense to do it. (e.g. you probably wouldn't negate a copyright like <a class="dtext-link dtext-post-search-link" href="/posts?tags=-touhou">-touhou</a>)</p><p>-</p><blockquote><p>Type-kun said:<br>DATA DATA DATA</p></blockquote><p>cool, thanks!</p><p>also thanks to albert for providing the data dump!</p> r0d3n7z /users/23205 tag:danbooru.me,2005:ForumPost/106417 2015-07-16T15:27:55-04:00 2015-07-16T15:27:55-04:00 @Type-kun: > CodeKyuubi said: > > Not entirely sure what... <blockquote> <p>CodeKyuubi said:</p> <p>Not entirely sure what the numbers mean. Does a harmonic mean for score percentile with a result, of say, 92, mean that the average post of x tag by y user places in the 92nd percentile of score?</p> </blockquote><p>Yeah. It seems to mean that average post of x tag by y user has score greater or equal than 92% of other posts with x tag.</p> Type-kun /users/337059 tag:danbooru.me,2005:ForumPost/106414 2015-07-16T15:10:29-04:00 2015-07-16T15:10:29-04:00 @CodeKyuubi: Not entirely sure what the numbers mean. Does a... <p>Not entirely sure what the numbers mean. Does a harmonic mean for score percentile with a result, of say, 92, mean that the average post of x tag by y user places in the 92nd percentile of score?</p> CodeKyuubi /users/81291 tag:danbooru.me,2005:ForumPost/106401 2015-07-16T13:50:48-04:00 2015-07-16T13:50:48-04:00 @Type-kun: http://puu.sh/j1yno.zip - fixed data for... <p><a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="http://puu.sh/j1yno.zip">http://puu.sh/j1yno.zip</a> - fixed data for contributors.</p><p>Done for now. If there's something else you want to gauge, write here.</p> Type-kun /users/337059 tag:danbooru.me,2005:ForumPost/106400 2015-07-16T13:25:17-04:00 2015-07-16T13:27:29-04:00 @Type-kun: http://puu.sh/j1wGx.zip - here's the same data... <p><a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="http://puu.sh/j1wGx.zip">http://puu.sh/j1wGx.zip</a> - here's the same data per uploader instead of approver, one file ("members") for posts approved by someone, one ("contributors") for auto-approved posts. </p><p>Now that I think about it, deleted posts from regular users will also appear in contributors.csv... but those should be easy to filter out based on user ID, anyway.</p><p>E: though, no. 2/3 of contributors.csv is not, in fact, contributors. I will redo that one.</p> Type-kun /users/337059 tag:danbooru.me,2005:ForumPost/106396 2015-07-16T12:43:30-04:00 2015-07-16T13:25:11-04:00 @Type-kun: Ok, here's some interesting data:... <p>Ok, here's some interesting data: <a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="http://puu.sh/j1ugz.csv">http://puu.sh/j1ugz.csv</a></p><p>It's harmonic and arithmetic means for favcount and score percentiles, as well as post count, per peer group per approver, for posts between Jan 1, 2015 and Jul 7, 2015. Basically, it's that approver performance report we discussed in <a class="dtext-link dtext-id-link dtext-forum-topic-id-link" href="/forum_topics/11837">topic #11837</a>, for last half-a-year.</p><p>Similar data is currently calculated for non-contributor and contributor users. Somebody should make pretty diagrams out of it :3</p> Type-kun /users/337059 tag:danbooru.me,2005:ForumPost/106371 2015-07-16T03:56:44-04:00 2015-07-16T03:56:44-04:00 @Type-kun: Looking further, I'll try "Nearest rank" method... <p>Looking further, I'll try "Nearest rank" method for percentile calculation. Will also ceil non-integer percentiles instead of floor'ing them. This way, percentile distribution will be 0 &lt; P &lt;= 100, integer, which is good for harmonic mean. I will also compute arithmetic mean at the same time, just to check out how well is that working.</p><p>Also, regarding peer groups, shouldn't we also have groups with negated tags? Specifically, <a class="dtext-link dtext-post-search-link" href="/posts?tags=comic">comic</a> tag, no other general tags are counted in currently. There would be groups like <a class="dtext-link dtext-post-search-link" href="/posts?tags=rating%3As%20-comic">rating:s -comic</a> then.</p> Type-kun /users/337059 tag:danbooru.me,2005:ForumPost/106360 2015-07-15T16:43:04-04:00 2015-07-15T16:50:53-04:00 @Type-kun: Ok, math failed me on this one. I've resorted... <p>Ok, math failed me on this one. I've resorted to most common meanings and calculated "percentile" as "percent of images that have lower score than this one". However, since all histograms are skewed at zero values, and for some peer groups zero is the lowest score, it's highly possible for a post to legitimately be in 0th percentile? there are no posts with scores below zero, 0/total = 0. </p><p>It's no big deal, but then harmonic mean kicks in. If I go with wiki, it's N/(1/x1+1/x2+...+1/xN). The thing is, it's meant for <strong>positive</strong> numbers only. I learned about this the hard way - after half-an-hour of processing I got "mean percentile" of 150 zeros and three 85s to be over 4000.</p><p>So, which one do I fix, and how exactly? :3 I can treat 0s as 1s for harmonic mean calculation, but that's not exactly correct.</p> Type-kun /users/337059 tag:danbooru.me,2005:ForumPost/106359 2015-07-15T15:28:04-04:00 2015-07-15T15:28:04-04:00 @Bibs: I have thought about this for awhile now too. ... <p>I have thought about this for awhile now too.</p><p>Some copyrights or even obscure tag descriptions just seem to have a stronger association to higher quality art.</p> Bibs /users/175923 tag:danbooru.me,2005:ForumPost/106356 2015-07-15T13:05:38-04:00 2015-07-15T13:05:38-04:00 @Type-kun: Moving here from topic #11837 Now that DB dump... <p>Moving here from <a class="dtext-link dtext-id-link dtext-forum-topic-id-link" href="/forum_topics/11837">topic #11837</a></p><p>Now that DB dump is available, here's more data: <a rel="external nofollow noreferrer" class="dtext-link dtext-external-link" href="http://puu.sh/j0fCc.zip">http://puu.sh/j0fCc.zip</a></p><p>For all data, only posts from July 07, 2015 or older are counted. Deleted posts ARE included.</p><p>peer_groups.csv shows total post count per peer group.</p><p>score_histogram.csv and favcount_histogram.csv show distribution of score and favcounts per peer group. Only peer groups with 500+ post count are included. No graphical data, it weighs a lot, easy to create in excel/openoffice/pretty much any analytical or math software. Now, if someone could tell me how to calculate percentiles and harmonic means correctly, I'll be able to get "percentile per peer group per approver for certain dates" report running on my machine, to see the results.</p> Type-kun /users/337059