{
  "id": 56524,
  "title": "Share Your Public LB Journey",
  "url": "/competitions/talkingdata-adtracking-fraud-detection/discussion/56524",
  "author_name": "James Trotman",
  "post_date": "2018-05-10T16:16:42.456000",
  "votes": 17,
  "comment_count": 37,
  "views": 0,
  "content": "<p>So, the leaderboard ended up quite distorted, and some people are unhappy. Here is a way to show that at least you were up there in the gold/silver/bronze zones (or top 50%, or at least higher than you ended up) at some point in time…</p>\n\n<p>It turns out to be very easy to reconstruct the public leaderboard at any point in time using a few lines of Pandas. For newbies/those who haven’t noticed, all submissions that improve on the public LB are summarized <a href=\"https://www.kaggle.com/c/8540/publicleaderboarddata.zip\">here</a> - linked from the <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/leaderboard\">leaderboard page</a> - every row in that CSV creates a new public LB ordering. If you select by a time cutoff, then groupby teams and take the max submission score for each, and rank that, you end up with a snapshot of the public LB. I’ve put a <a href=\"https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time\">kernel here</a> to make it easy… The script is:</p>\n\n<pre><code>%matplotlib inline\nimport pandas as pd, numpy as np\n\ns = pd.read_csv('talkingdata-adtracking-fraud-detection-publicleaderboard.csv',\n                 parse_dates=['SubmissionDate'])\ncut = pd.to_datetime('2018-05-08')\ns = s.loc[s.SubmissionDate&lt;=cut] # omit post competition subs\ns['doy'] = s.SubmissionDate.dt.dayofyear\n\ndoy2date = s.groupby('doy').SubmissionDate.max().dt.date.to_dict()\ndays = np.unique(s.doy.values)\n\ndef leaderboard(doy):\n    return s.loc[s.doy&lt;=doy].groupby('TeamName').Score.max().rank(ascending=False)\n\ndef leaderboard_rank(doy, team):\n    return leaderboard(doy).get(team)\n\ndef chart_public_lb(team):\n    ser = pd.Series({doy2date[doy]:leaderboard_rank(doy, team) for doy in days})\n    p = ser.plot(figsize=(12,5))\n    p.set_title(team + ' - TalkingData AdTracking Fraud Detection Challenge'\n                     + ' - Public LB Rank')\n    p.invert_yaxis()\n    p.grid(True)\n    p.set_ylim(top=0)\n    return p\n\nchart_public_lb('Dilbert') # put team name here\n</code></pre>\n\n<p>There might be slight inaccuracies due to team ups, but it looks correct to me, and tells the gist of the story. (Should work for any competition shorter than a year, if it's longer you can modify it to select by dates instead of day-of-year.)</p>\n\n<p>I’ve plotted a bunch out of curiosity and it looks like there are a lot of interesting stories out there. Some end badly. Some have a happy ending. Many show how viciously relentless the pace of Kaggle competitions can be – stop submitting and you’ll slide quite far quite fast ;)</p>\n\n<p>I’ll post only my own here – and to keep a positive spin on it I think it would be nicer if people stick to sharing their own journey, rather than using it to point out other people who mysteriously join &amp; leap into the medals in the dying moments &gt;:S</p>\n\n<p>For what it’s worth, I’m always impressed by people posting strong submissions early on in the competition, especially the first few days – it is more likely to be the result of your own work and not cheap click &amp; submit or blending kernels (not that that's all bad, you can learn some things that way...) Or perhaps, having had the luck to have worked on a very similar task before. Either way I’m sure some people would like to be able to document that… especially if you use it to illustrate an explanation of what you did.</p>\n\n<p>To share here, you can fork my <a href=\"https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time\">kernel</a> and link to it, or put the graphic here.</p>\n\n<p>Some instructions:</p>\n\n<ul>\n<li>In kernel, right click graph → Save Image As… → Save the png.</li>\n<li>Attach png to your discussion post, click Post Comment.</li>\n<li>Right click the http link to the png in your post → Copy Link Location…</li>\n<li>Edit your comment, insert an image, paste the URL you copied.</li>\n</ul>",
  "messages": [
    {
      "id": 326994,
      "postDate": "2018-05-10T16:16:42.457Z",
      "content": "<p>So, the leaderboard ended up quite distorted, and some people are unhappy. Here is a way to show that at least you were up there in the gold/silver/bronze zones (or top 50%, or at least higher than you ended up) at some point in time…</p>\n\n<p>It turns out to be very easy to reconstruct the public leaderboard at any point in time using a few lines of Pandas. For newbies/those who haven’t noticed, all submissions that improve on the public LB are summarized <a href=\"https://www.kaggle.com/c/8540/publicleaderboarddata.zip\">here</a> - linked from the <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/leaderboard\">leaderboard page</a> - every row in that CSV creates a new public LB ordering. If you select by a time cutoff, then groupby teams and take the max submission score for each, and rank that, you end up with a snapshot of the public LB. I’ve put a <a href=\"https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time\">kernel here</a> to make it easy… The script is:</p>\n\n<pre><code>%matplotlib inline\nimport pandas as pd, numpy as np\n\ns = pd.read_csv('talkingdata-adtracking-fraud-detection-publicleaderboard.csv',\n                 parse_dates=['SubmissionDate'])\ncut = pd.to_datetime('2018-05-08')\ns = s.loc[s.SubmissionDate&lt;=cut] # omit post competition subs\ns['doy'] = s.SubmissionDate.dt.dayofyear\n\ndoy2date = s.groupby('doy').SubmissionDate.max().dt.date.to_dict()\ndays = np.unique(s.doy.values)\n\ndef leaderboard(doy):\n    return s.loc[s.doy&lt;=doy].groupby('TeamName').Score.max().rank(ascending=False)\n\ndef leaderboard_rank(doy, team):\n    return leaderboard(doy).get(team)\n\ndef chart_public_lb(team):\n    ser = pd.Series({doy2date[doy]:leaderboard_rank(doy, team) for doy in days})\n    p = ser.plot(figsize=(12,5))\n    p.set_title(team + ' - TalkingData AdTracking Fraud Detection Challenge'\n                     + ' - Public LB Rank')\n    p.invert_yaxis()\n    p.grid(True)\n    p.set_ylim(top=0)\n    return p\n\nchart_public_lb('Dilbert') # put team name here\n</code></pre>\n\n<p>There might be slight inaccuracies due to team ups, but it looks correct to me, and tells the gist of the story. (Should work for any competition shorter than a year, if it's longer you can modify it to select by dates instead of day-of-year.)</p>\n\n<p>I’ve plotted a bunch out of curiosity and it looks like there are a lot of interesting stories out there. Some end badly. Some have a happy ending. Many show how viciously relentless the pace of Kaggle competitions can be – stop submitting and you’ll slide quite far quite fast ;)</p>\n\n<p>I’ll post only my own here – and to keep a positive spin on it I think it would be nicer if people stick to sharing their own journey, rather than using it to point out other people who mysteriously join &amp; leap into the medals in the dying moments &gt;:S</p>\n\n<p>For what it’s worth, I’m always impressed by people posting strong submissions early on in the competition, especially the first few days – it is more likely to be the result of your own work and not cheap click &amp; submit or blending kernels (not that that's all bad, you can learn some things that way...) Or perhaps, having had the luck to have worked on a very similar task before. Either way I’m sure some people would like to be able to document that… especially if you use it to illustrate an explanation of what you did.</p>\n\n<p>To share here, you can fork my <a href=\"https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time\">kernel</a> and link to it, or put the graphic here.</p>\n\n<p>Some instructions:</p>\n\n<ul>\n<li>In kernel, right click graph → Save Image As… → Save the png.</li>\n<li>Attach png to your discussion post, click Post Comment.</li>\n<li>Right click the http link to the png in your post → Copy Link Location…</li>\n<li>Edit your comment, insert an image, paste the URL you copied.</li>\n</ul>",
      "rawMarkdown": "So, the leaderboard ended up quite distorted, and some people are unhappy. Here is a way to show that at least you were up there in the gold/silver/bronze zones (or top 50%, or at least higher than you ended up) at some point in time…\n\nIt turns out to be very easy to reconstruct the public leaderboard at any point in time using a few lines of Pandas. For newbies/those who haven’t noticed, all submissions that improve on the public LB are summarized [here][1] - linked from the [leaderboard page][2] - every row in that CSV creates a new public LB ordering. If you select by a time cutoff, then groupby teams and take the max submission score for each, and rank that, you end up with a snapshot of the public LB. I’ve put a [kernel here][3] to make it easy… The script is:\n\n    %matplotlib inline\n    import pandas as pd, numpy as np\n    \n    s = pd.read_csv('talkingdata-adtracking-fraud-detection-publicleaderboard.csv',\n                     parse_dates=['SubmissionDate'])\n    cut = pd.to_datetime('2018-05-08')\n    s = s.loc[s.SubmissionDate&lt;=cut] # omit post competition subs\n    s['doy'] = s.SubmissionDate.dt.dayofyear\n    \n    doy2date = s.groupby('doy').SubmissionDate.max().dt.date.to_dict()\n    days = np.unique(s.doy.values)\n    \n    def leaderboard(doy):\n        return s.loc[s.doy&lt;=doy].groupby('TeamName').Score.max().rank(ascending=False)\n    \n    def leaderboard_rank(doy, team):\n        return leaderboard(doy).get(team)\n    \n    def chart_public_lb(team):\n        ser = pd.Series({doy2date[doy]:leaderboard_rank(doy, team) for doy in days})\n        p = ser.plot(figsize=(12,5))\n        p.set_title(team + ' - TalkingData AdTracking Fraud Detection Challenge'\n                         + ' - Public LB Rank')\n        p.invert_yaxis()\n        p.grid(True)\n        p.set_ylim(top=0)\n        return p\n    \n    chart_public_lb('Dilbert') # put team name here\n\nThere might be slight inaccuracies due to team ups, but it looks correct to me, and tells the gist of the story. (Should work for any competition shorter than a year, if it's longer you can modify it to select by dates instead of day-of-year.)\n\nI’ve plotted a bunch out of curiosity and it looks like there are a lot of interesting stories out there. Some end badly. Some have a happy ending. Many show how viciously relentless the pace of Kaggle competitions can be – stop submitting and you’ll slide quite far quite fast ;)\n\nI’ll post only my own here – and to keep a positive spin on it I think it would be nicer if people stick to sharing their own journey, rather than using it to point out other people who mysteriously join &amp; leap into the medals in the dying moments &gt;:S\n\nFor what it’s worth, I’m always impressed by people posting strong submissions early on in the competition, especially the first few days – it is more likely to be the result of your own work and not cheap click &amp; submit or blending kernels (not that that's all bad, you can learn some things that way...) Or perhaps, having had the luck to have worked on a very similar task before. Either way I’m sure some people would like to be able to document that… especially if you use it to illustrate an explanation of what you did.\n\nTo share here, you can fork my [kernel][3] and link to it, or put the graphic here.\n\nSome instructions:\n\n - In kernel, right click graph → Save Image As… → Save the png.\n - Attach png to your discussion post, click Post Comment.\n - Right click the http link to the png in your post → Copy Link Location…\n - Edit your comment, insert an image, paste the URL you copied.\n\n  [1]: https://www.kaggle.com/c/8540/publicleaderboarddata.zip\n  [2]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/leaderboard\n  [3]: https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time",
      "votes": 17
    },
    {
      "id": 328474,
      "postDate": "2018-05-14T12:18:34.320Z",
      "content": "<p>It's a sad story. Middle drop due to some personal business. Final drop due to high score kernel sharing. \n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328474/9422/TalkingData.png\" alt=\"enter image description here\">\nNice script.</p>",
      "rawMarkdown": "It's a sad story. Middle drop due to some personal business. Final drop due to high score kernel sharing. \n![enter image description here][1]\nNice script.\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328474/9422/TalkingData.png",
      "votes": 4
    },
    {
      "id": 327000,
      "postDate": "2018-05-10T16:27:01Z",
      "content": "<p>Hey, that's a nice script. I love little kernels like that! Here's mine:</p>\n\n<p><img src=\"https://i.imgur.com/AOal5Re.png\" alt=\"enter image description here\"></p>",
      "rawMarkdown": "Hey, that's a nice script. I love little kernels like that! Here's mine:\n\n![enter image description here][1]\n\n\n  [1]: https://i.imgur.com/AOal5Re.png",
      "votes": 4,
      "replies": [
        {
          "id": 327052,
          "postDate": "2018-05-10T18:42:21.273Z",
          "content": "<p>Looks good to me, we all know what the last day drop means... Plus you got a great haul of discussion points from that, currently <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182\">4th most popular post</a> for the competition - congrats :)</p>",
          "rawMarkdown": "Looks good to me, we all know what the last day drop means... Plus you got a great haul of discussion points from that, currently [4th most popular post][1] for the competition - congrats :)\n\n  [1]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182\n",
          "votes": 2
        }
      ]
    },
    {
      "id": 326995,
      "postDate": "2018-05-10T16:18:43.333Z",
      "content": "<p>Here’s mine to start off with – <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56571\">fuller write-up</a> <strike>still to come…</strike></p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/326995/9398/jt_public_lb.png\" alt=\"JT public LB\"></p>\n\n<p>Edit: In short, I started off with some old categorical neural network code in the first week – managed to get top 13 then went back to the <a href=\"https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge\">Toxic Comments</a> competition. You can see when the better Kernels start to be shared a couple of days later, the score really starts to slide. The zig-zags are all from single lightgbm models, with poor leaderboard correlation until the <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56571\">last two days</a>.</p>",
      "rawMarkdown": "Here’s mine to start off with – [fuller write-up][1] <strike>still to come…</strike>\n\n![JT public LB][2]\n\nEdit: In short, I started off with some old categorical neural network code in the first week – managed to get top 13 then went back to the [Toxic Comments][3] competition. You can see when the better Kernels start to be shared a couple of days later, the score really starts to slide. The zig-zags are all from single lightgbm models, with poor leaderboard correlation until the [last two days][4].\n\n\n  [1]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56571\n  [2]: https://kaggle2.blob.core.windows.net/forum-message-attachments/326995/9398/jt_public_lb.png\n  [3]: https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge\n  [4]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56571",
      "votes": 4,
      "replies": [
        {
          "id": 327041,
          "postDate": "2018-05-10T18:16:55.317Z",
          "content": "<blockquote>\n  <p>fuller writeup still to come…</p>\n</blockquote>\n\n<p>Can't wait....</p>",
          "rawMarkdown": "&gt; fuller writeup still to come…\n\nCan't wait....",
          "votes": 1
        },
        {
          "id": 327051,
          "postDate": "2018-05-10T18:37:47.690Z",
          "content": "<p>Ha, don't get too excited, I'm struggling for things to say that have not been shared already :) I have no killer tips, just odds and ends. I loved your write-up - very extensive, and I'm <strong>still</strong> smiling about the \"solo fools\" comment, congrats on your second solo gold from a (mostly silver) fellow solo fool :D</p>\n\n<p>(<a href=\"https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259560\">My prediction</a> from five months ago is looking really good!)</p>",
          "rawMarkdown": "Ha, don't get too excited, I'm struggling for things to say that have not been shared already :) I have no killer tips, just odds and ends. I loved your write-up - very extensive, and I'm **still** smiling about the \"solo fools\" comment, congrats on your second solo gold from a (mostly silver) fellow solo fool :D\n\n([My prediction][1] from five months ago is looking really good!)\n\n  [1]: https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259560\n",
          "votes": 1
        },
        {
          "id": 327061,
          "postDate": "2018-05-10T19:03:32.867Z",
          "content": "<p>I can make the <a href=\"https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259569\">same answer</a> as well!</p>\n\n<p>Your jump from public to private is a sign of your sound approach.  </p>\n\n<p>It is not the first time.  This clearly shows luck does not play a role in your results.</p>",
          "rawMarkdown": "I can make the [same answer][1] as well!\n\nYour jump from public to private is a sign of your sound approach.  \n\nIt is not the first time.  This clearly shows luck does not play a role in your results.\n\n  [1]: https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259569",
          "votes": 1
        },
        {
          "id": 327294,
          "postDate": "2018-05-11T07:43:35.917Z",
          "content": "<p>You also made <a href=\"https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259542\">another prediction</a> that almost came true here!</p>",
          "rawMarkdown": "You also made [another prediction][1] that almost came true here!\n\n\n  [1]: https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259542",
          "votes": 1
        },
        {
          "id": 327443,
          "postDate": "2018-05-11T15:06:40.800Z",
          "content": "<p>It is really interesting. I was thinking then about how fragile the whole setup can be, where one defector can ruin the concept.</p>\n\n<p>I posted an <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182#325640\">idea in the middle of the megathread</a> about implicit team merging - identical CSV files are a special case of highly correlated submissions that it would be quite easy to address, by merging them into one implicit team.</p>\n\n<p>Identical submissions are easy to detect but once you look at high correlations it becomes shades of grey, harder to make policies. (Also I can't recall seeing so few leaderboard removals from a competition as this one, my guess is, since scoring takes four minutes or so, and the <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/51877#295772\">system cannot take the original test set</a>, the cheater detection system is perhaps not efficient enough to run in the time available?!)</p>\n\n<p>To some extent the sharing problem is self balancing - I can't recall the top 5 ever sharing a crucial secret, or the top 10, except perhaps in <a href=\"https://www.kaggle.com/c/quora-question-pairs/discussion/33801\">Quora</a>, but top 100 tips are fairly regular, so those still leave a huge majority of people affected by it and very disappointed - it looks like Dirk deleted his account after the negative feedback. So it won't be him next time ;)</p>\n\n<p>It is hard for Kaggle... Competitors and sponsors have different goals - I think ideas to lock things down a bit in the last week are good, but I'm not sure a competition sponsor would like the idea of limiting progress...</p>",
          "rawMarkdown": "It is really interesting. I was thinking then about how fragile the whole setup can be, where one defector can ruin the concept.\n\nI posted an [idea in the middle of the megathread][1] about implicit team merging - identical CSV files are a special case of highly correlated submissions that it would be quite easy to address, by merging them into one implicit team.\n\nIdentical submissions are easy to detect but once you look at high correlations it becomes shades of grey, harder to make policies. (Also I can't recall seeing so few leaderboard removals from a competition as this one, my guess is, since scoring takes four minutes or so, and the [system cannot take the original test set][2], the cheater detection system is perhaps not efficient enough to run in the time available?!)\n\nTo some extent the sharing problem is self balancing - I can't recall the top 5 ever sharing a crucial secret, or the top 10, except perhaps in [Quora][3], but top 100 tips are fairly regular, so those still leave a huge majority of people affected by it and very disappointed - it looks like Dirk deleted his account after the negative feedback. So it won't be him next time ;)\n\nIt is hard for Kaggle... Competitors and sponsors have different goals - I think ideas to lock things down a bit in the last week are good, but I'm not sure a competition sponsor would like the idea of limiting progress...\n\n\n  [1]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182#325640\n  [2]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/51877#295772\n  [3]: https://www.kaggle.com/c/quora-question-pairs/discussion/33801\n",
          "votes": 2
        },
        {
          "id": 327446,
          "postDate": "2018-05-11T15:09:58.900Z",
          "content": "<p>I like your mega team idea: identical subs should be merged into one team.  Simple and efficient.  It should make people think twice about reusing a kernel output as it.</p>",
          "rawMarkdown": "I like your mega team idea: identical subs should be merged into one team.  Simple and efficient.  It should make people think twice about reusing a kernel output as it.",
          "votes": 1
        },
        {
          "id": 327447,
          "postDate": "2018-05-11T15:15:34.200Z",
          "content": "<p>Yes, I forgot to add that obviously it just shifts the problem along a bit, people add noise, change single rows or average with other subs, but it often surprises me how large the clumps of identical scores are, and even if those clumps were merged into teams and had lower points I'd bet some people would still do it.</p>",
          "rawMarkdown": "Yes, I forgot to add that obviously it just shifts the problem along a bit, people add noise, change single rows or average with other subs, but it often surprises me how large the clumps of identical scores are, and even if those clumps were merged into teams and had lower points I'd bet some people would still do it."
        },
        {
          "id": 327454,
          "postDate": "2018-05-11T15:32:13.167Z",
          "content": "<p>Yes, but at least it impacts people outside the mega team by only one rank shift instead of a very large number.  And yes, it can be defeated by modifying the submission.  At least it filters out the cut and paste specialists who are a plague here.</p>",
          "rawMarkdown": "Yes, but at least it impacts people outside the mega team by only one rank shift instead of a very large number.  And yes, it can be defeated by modifying the submission.  At least it filters out the cut and paste specialists who are a plague here.",
          "votes": 1
        }
      ]
    },
    {
      "id": 328357,
      "postDate": "2018-05-14T04:09:40.057Z",
      "content": "<p>That is interesting!\n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328357/9420/lb.png\" alt=\"enter image description here\"></p>",
      "rawMarkdown": "That is interesting!\n![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328357/9420/lb.png",
      "votes": 1,
      "replies": [
        {
          "id": 328431,
          "postDate": "2018-05-14T10:00:59.457Z",
          "content": "<p>Congrats on the gold finish! Also, since the dynamic leaderboard pages only load the top 50 by default, it's a nice achievement to stay on the 'front page' of the leaderboard for so long :)</p>\n\n<p>I'm curious to know more about your solution, e.g. were matrix factorizations part of it or did you have other techniques?</p>",
          "rawMarkdown": "Congrats on the gold finish! Also, since the dynamic leaderboard pages only load the top 50 by default, it's a nice achievement to stay on the 'front page' of the leaderboard for so long :)\n\nI'm curious to know more about your solution, e.g. were matrix factorizations part of it or did you have other techniques?\n"
        },
        {
          "id": 328624,
          "postDate": "2018-05-14T18:19:42.227Z",
          "content": "<p>My solution is nothing special, so I didn't post it. Around 40 simple features (most of them can be found in kernels) and carefully tuned lightgbm. Single model, no ensemble, no ordering trick.</p>",
          "rawMarkdown": "My solution is nothing special, so I didn't post it. Around 40 simple features (most of them can be found in kernels) and carefully tuned lightgbm. Single model, no ensemble, no ordering trick.",
          "votes": 4
        }
      ]
    },
    {
      "id": 327860,
      "postDate": "2018-05-12T17:40:51.857Z",
      "content": "<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/327860/9408/__results___4_1.png\" alt=\"\"> Here is our story</p>",
      "rawMarkdown": "![][1] Here is our story\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/327860/9408/__results___4_1.png",
      "votes": 1,
      "replies": [
        {
          "id": 327898,
          "postDate": "2018-05-12T21:06:56.850Z",
          "content": "<p>Hi Araks - You got some well earned discussion medals from this competition, I liked your <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/forums/t/52927/from-100k-to-100mm-rows\">From 100k to 100MM rows</a> post early on.</p>\n\n<p>The graph looks like a nice progression to me, you mentioned elsewhere that your private leaderboard drop <strong>is partly*  due to</strong> <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/forums/t/56241/130-copied-submissions-in-silver-and-bronze?forumMessageId=326323#post326323\">not selecting two submissions</a>, which is a vital part of every competition... play some more and you may see how frustrating a process it can be...</p>\n\n<p>There are a lot of good threads in different competitions about this public → private shake-up, a particularly good one is the <a href=\"https://www.kaggle.com/c/bosch-production-line-performance/discussion/24961\">Shake-up???</a> thread by @BreakfastPirate in the Bosch competition.</p>\n\n<p>My favourite <a href=\"https://www.kaggle.com/c/bosch-production-line-performance/discussion/24961#144008\">comment there</a> is quoted below... (it may take you some more competitions to find this as funny as long time Kagglers will :)</p>\n\n<blockquote>\n  <p><strong>BreakfastPirate wrote</strong></p>\n  \n  <p>When you select your 2 submissions, choose wisely. Don't choose poorly. There is a lot of Kaggle-wisdom in this video clip: <a href=\"https://www.youtube.com/watch?v=A0TalLrtZ24&amp;t=0m51s\">https://www.youtube.com/watch?v=A0TalLrtZ24&amp;t=0m51s</a></p>\n</blockquote>\n\n<h3>EDIT *</h3>\n\n<p>I agree <strong><em>100%</em></strong> with your comment below, I was trying to focus on positives, but you're right, for example there are <strong><em>113</em></strong> teams ahead of you with a score of <strong><em>0.982062</em></strong> from a blending kernel, which frankly <strong><em>sucks</em></strong>. They should <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182#325640\">share one rank</a> and you should get a medal :)</p>\n\n<p>But on the positive side again, sharing insightful posts during a competition is <strong><em>far</em></strong> stronger evidence of honest hard work at trying to understand the problem and find a good model, so congrats on that :)</p>",
          "rawMarkdown": "Hi Araks - You got some well earned discussion medals from this competition, I liked your [From 100k to 100MM rows][1] post early on.\n\nThe graph looks like a nice progression to me, you mentioned elsewhere that your private leaderboard drop **is partly*  due to** [not selecting two submissions][2], which is a vital part of every competition... play some more and you may see how frustrating a process it can be...\n\nThere are a lot of good threads in different competitions about this public → private shake-up, a particularly good one is the [Shake-up???][3] thread by @BreakfastPirate in the Bosch competition.\n\nMy favourite [comment there][4] is quoted below... (it may take you some more competitions to find this as funny as long time Kagglers will :)\n\n&gt; **BreakfastPirate wrote**\n&gt; \n&gt; When you select your 2 submissions, choose wisely. Don't choose poorly. There is a lot of Kaggle-wisdom in this video clip: https://www.youtube.com/watch?v=A0TalLrtZ24&amp;t=0m51s\n\n### EDIT *\n\nI agree ***100%*** with your comment below, I was trying to focus on positives, but you're right, for example there are ***113*** teams ahead of you with a score of ***0.982062*** from a blending kernel, which frankly ***sucks***. They should [share one rank][5] and you should get a medal :)\n\nBut on the positive side again, sharing insightful posts during a competition is ***far*** stronger evidence of honest hard work at trying to understand the problem and find a good model, so congrats on that :)\n\n\n  [1]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/forums/t/52927/from-100k-to-100mm-rows\n  [2]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/forums/t/56241/130-copied-submissions-in-silver-and-bronze?forumMessageId=326323#post326323\n  [3]: https://www.kaggle.com/c/bosch-production-line-performance/discussion/24961\n  [4]: https://www.kaggle.com/c/bosch-production-line-performance/discussion/24961#144008\n  [5]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182#325640\n",
          "votes": 1
        },
        {
          "id": 327931,
          "postDate": "2018-05-13T00:41:13.287Z",
          "content": "<p>Hi @James, thanks for looking at our progress carefully. Not selecting submissions was a huge mistake which I will try to correct next time. Another mistake would be putting too much pressure on the last days. And another mistake would be not selecting features wisely. Another mistake...</p>\n\n<p>Eventually, we all know the biggest reason why we had such a big drop and didn't get a medal, the last day kernels. I would be much happier to see it mentioned in your message above as well. Because if we don't acknowledge that there was such a thing, we will not form a community where everyone is ready to ignore the last day kernels even if those kernels ​are scoring high.</p>",
          "rawMarkdown": "Hi @James, thanks for looking at our progress carefully. Not selecting submissions was a huge mistake which I will try to correct next time. Another mistake would be putting too much pressure on the last days. And another mistake would be not selecting features wisely. Another mistake...\n \nEventually, we all know the biggest reason why we had such a big drop and didn't get a medal, the last day kernels. I would be much happier to see it mentioned in your message above as well. Because if we don't acknowledge that there was such a thing, we will not form a community where everyone is ready to ignore the last day kernels even if those kernels ​are scoring high.",
          "votes": 2
        },
        {
          "id": 329197,
          "postDate": "2018-05-16T00:49:06.450Z",
          "content": "<p>Thanks for the edit, @James. I totally understood why you didn't mention it at first. And I see that you talk about it a lot. The thing is, I am also trying to focus on the positive but this time I am not able to forget the negative very quickly and want everyone to remember it with me, haha. I needed a medal for my resume (and only for that, honestly). So now I hope that at least the tremendous learning experience will pay off. </p>",
          "rawMarkdown": "Thanks for the edit, @James. I totally understood why you didn't mention it at first. And I see that you talk about it a lot. The thing is, I am also trying to focus on the positive but this time I am not able to forget the negative very quickly and want everyone to remember it with me, haha. I needed a medal for my resume (and only for that, honestly). So now I hope that at least the tremendous learning experience will pay off. ",
          "votes": 1
        },
        {
          "id": 329201,
          "postDate": "2018-05-16T00:52:27.620Z",
          "content": "<p>By the way, I have already upvoted your comment about sharing one rank and it is a very clever solution to this situation.</p>",
          "rawMarkdown": "By the way, I have already upvoted your comment about sharing one rank and it is a very clever solution to this situation.",
          "votes": 1
        },
        {
          "id": 329538,
          "postDate": "2018-05-16T17:03:33.860Z",
          "content": "<p>I hope it does pay off for you, despite the drawbacks of disruptive late sharing Kaggle is still a great site to try things out and learn.</p>\n\n<p><em>Practice makes perfect</em> and if you come back and try another competition you'll already be ahead of the <a href=\"https://www.kaggle.com/mlearn/user-engagement-on-kaggle-competitions\">many people who do only one competition</a> (interesting kernel), it's only a relatively small number of us (odd) heavy users that keep coming back for more :)</p>\n\n<p>(Also - you can still make submissions after the competition, so you can see which of the shared ideas work best with your features. In some way it's <em>more</em> worthwhile - after deadline day you're obviously not doing it for the medal, purely for the knowledge...)</p>",
          "rawMarkdown": "I hope it does pay off for you, despite the drawbacks of disruptive late sharing Kaggle is still a great site to try things out and learn.\n\n*Practice makes perfect* and if you come back and try another competition you'll already be ahead of the [many people who do only one competition][1] (interesting kernel), it's only a relatively small number of us (odd) heavy users that keep coming back for more :)\n\n(Also - you can still make submissions after the competition, so you can see which of the shared ideas work best with your features. In some way it's *more* worthwhile - after deadline day you're obviously not doing it for the medal, purely for the knowledge...)\n\n  [1]: https://www.kaggle.com/mlearn/user-engagement-on-kaggle-competitions\n\n",
          "votes": 1
        }
      ]
    },
    {
      "id": 330089,
      "postDate": "2018-05-18T02:55:24.413Z",
      "content": "<p>Nice script! Here is mine:</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/330089/9443/ShawnXiao.png\" alt=\"ShawnXiao\"></p>",
      "rawMarkdown": "Nice script! Here is mine:\n\n![ShawnXiao][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/330089/9443/ShawnXiao.png",
      "votes": 2
    },
    {
      "id": 328217,
      "postDate": "2018-05-13T17:36:15.147Z",
      "content": "<p>Great Script!! Here is our Public LB Journey. were constantly in Top 150, before high score kernel sharing. Also better submission selection would have us within ~100. \n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328217/9421/__results___4_1.png\" alt=\"Here is our Public LB Journey\"></p>",
      "rawMarkdown": "Great Script!! Here is our Public LB Journey. were constantly in Top 150, before high score kernel sharing. Also better submission selection would have us within ~100. \n![Here is our Public LB Journey][1]\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328217/9421/__results___4_1.png",
      "votes": 2,
      "replies": [
        {
          "id": 328257,
          "postDate": "2018-05-13T20:01:00.463Z",
          "content": "<p>Thanks for sharing Vikas - lots of up-ticks in the graph there, makes me think that a metric that summarizes the gradients in the line would be another indicator of performance and/or effort...</p>\n\n<p>Actually, I see you have made a <a href=\"https://www.kaggle.com/vikasp/talkingdata-public-lb-progression-my-team\">public fork</a> of the kernel and linked to the image output, which due to a Kaggle bug stops working after a short while. I definitely saw the graph on this page earlier but now I see the img alt-text \"Here is our Public LB Journey\"...</p>",
          "rawMarkdown": "Thanks for sharing Vikas - lots of up-ticks in the graph there, makes me think that a metric that summarizes the gradients in the line would be another indicator of performance and/or effort...\n\nActually, I see you have made a [public fork][1] of the kernel and linked to the image output, which due to a Kaggle bug stops working after a short while. I definitely saw the graph on this page earlier but now I see the img alt-text \"Here is our Public LB Journey\"...\n\n  [1]: https://www.kaggle.com/vikasp/talkingdata-public-lb-progression-my-team\n",
          "votes": 1
        },
        {
          "id": 328362,
          "postDate": "2018-05-14T04:21:00.880Z",
          "content": "<p>Thanks for the tip, fixed :)</p>",
          "rawMarkdown": "Thanks for the tip, fixed :)"
        },
        {
          "id": 333288,
          "postDate": "2018-05-24T20:01:52.083Z",
          "content": "<p>This script is a such a relief , i know people with 3 submissions and a bronze , waiting for them to publish the LB journey.</p>",
          "rawMarkdown": "This script is a such a relief , i know people with 3 submissions and a bronze , waiting for them to publish the LB journey.",
          "votes": 1
        }
      ]
    },
    {
      "id": 327495,
      "postDate": "2018-05-11T17:21:47.707Z",
      "content": "<p>Hi my evolution , downhill</p>",
      "rawMarkdown": "Hi my evolution , downhill",
      "votes": 2,
      "replies": [
        {
          "id": 327532,
          "postDate": "2018-05-11T19:42:41.973Z",
          "content": "<p>Hi Bruno16 - thanks for sharing, although I can't see an image in your post, I still have the notebook open so I've just generated it myself - some nice leaps up the order there :)</p>\n\n<p><img src=\"https://i.imgur.com/4nCdMN4.png\" alt=\"Bruno16 - TalkingData AdTracking Fraud Detection Challenge - Public LB Rank\"></p>",
          "rawMarkdown": "Hi Bruno16 - thanks for sharing, although I can't see an image in your post, I still have the notebook open so I've just generated it myself - some nice leaps up the order there :)\n\n![Bruno16 - TalkingData AdTracking Fraud Detection Challenge - Public LB Rank][1]\n\n  [1]: https://i.imgur.com/4nCdMN4.png\n",
          "votes": 1
        },
        {
          "id": 327735,
          "postDate": "2018-05-12T09:52:56.190Z",
          "content": "<p>Thanks James, the upload button was not working...</p>",
          "rawMarkdown": "Thanks James, the upload button was not working..."
        }
      ]
    },
    {
      "id": 327055,
      "postDate": "2018-05-10T18:51:13.530Z",
      "content": "<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/327055/9402/index.png\" alt=\"enter image description here\">very nice kernel James!</p>",
      "rawMarkdown": "![enter image description here][1]very nice kernel James!\n\n\n  [1]: https://kaggle2.blob.core.windows.net/forum-message-attachments/327055/9402/index.png",
      "votes": 2,
      "replies": [
        {
          "id": 327103,
          "postDate": "2018-05-10T20:21:56.263Z",
          "content": "<p>Thanks <a href=\"/steubk\">@steubk</a>! That's a really consistent performance, and it makes me realise version 2 should have markers indicating when a team's actual submissions are made. In many other plots the time of most submissions are obvious from the up-tick in the line but from your graph I can't tell. That would make for another possible metric of performance - leaderboard rank drift over time vs submission rate...</p>",
          "rawMarkdown": "Thanks @steubk! That's a really consistent performance, and it makes me realise version 2 should have markers indicating when a team's actual submissions are made. In many other plots the time of most submissions are obvious from the up-tick in the line but from your graph I can't tell. That would make for another possible metric of performance - leaderboard rank drift over time vs submission rate...",
          "votes": 1
        }
      ]
    },
    {
      "id": 327019,
      "postDate": "2018-05-10T17:25:34.460Z",
      "content": "<p>Great, thanks.  Here is mine.  I think the drop is when I worked on DSB competition.</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/327019/9401/cpmp.png\" alt=\"enter image description here\"></p>",
      "rawMarkdown": "Great, thanks.  Here is mine.  I think the drop is when I worked on DSB competition.\n\n![enter image description here][1]\n\n\n  [1]: https://kaggle2.blob.core.windows.net/forum-message-attachments/327019/9401/cpmp.png",
      "votes": 2,
      "replies": [
        {
          "id": 327038,
          "postDate": "2018-05-10T18:11:39.277Z",
          "content": "<p>Ha, I was beating you so badly on 2018-03-23, you noob!</p>\n\n<p><em>cries at the corner of shower</em></p>",
          "rawMarkdown": "Ha, I was beating you so badly on 2018-03-23, you noob!\n\n*cries at the corner of shower*",
          "votes": 2
        }
      ]
    },
    {
      "id": 328135,
      "postDate": "2018-05-13T13:01:48.457Z",
      "content": "<p>Nice kernel. Here's my first Kaggle competition.\n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328135/9415/leaderboard.png\" alt=\"enter image description here\"></p>",
      "rawMarkdown": "Nice kernel. Here's my first Kaggle competition.\n![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328135/9415/leaderboard.png",
      "votes": 1,
      "replies": [
        {
          "id": 328206,
          "postDate": "2018-05-13T16:57:14.457Z",
          "content": "<p>Congrats on getting a silver in your first competition, you managed to out-score the blenders and Dirk's army :)</p>\n\n<p>Also, you must have used a more recent copy of <em>talkingdata-adtracking-fraud-detection-publicleaderboard.csv</em> (the file keeps growing as people keep submitting after the competition), so your graph extends a bit longer than the May 8th deadline. I've added a fix above and in the <a href=\"https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time\">kernel</a>.</p>",
          "rawMarkdown": "Congrats on getting a silver in your first competition, you managed to out-score the blenders and Dirk's army :)\n\nAlso, you must have used a more recent copy of *talkingdata-adtracking-fraud-detection-publicleaderboard.csv* (the file keeps growing as people keep submitting after the competition), so your graph extends a bit longer than the May 8th deadline. I've added a fix above and in the [kernel][1].\n\n\n  [1]: https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time",
          "votes": 1
        },
        {
          "id": 328218,
          "postDate": "2018-05-13T17:38:41.180Z",
          "content": "<p>Thanks James. \nI've fixed it.\n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328135/9418/leaderboard_5.8.png\" alt=\"enter image description here\"></p>",
          "rawMarkdown": "Thanks James. \nI've fixed it.\n![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328135/9418/leaderboard_5.8.png"
        }
      ]
    },
    {
      "id": 327010,
      "postDate": "2018-05-10T17:01:28.250Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "comments": [
    {
      "id": 328474,
      "author_name": "Liu Jilong",
      "author_url": "",
      "post_date": "2018-05-14T12:18:34.320000",
      "content": "<p>It's a sad story. Middle drop due to some personal business. Final drop due to high score kernel sharing. \n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328474/9422/TalkingData.png\" alt=\"enter image description here\">\nNice script.</p>",
      "votes": 4,
      "replies": []
    },
    {
      "id": 327000,
      "author_name": "Antonis Maronikolakis",
      "author_url": "",
      "post_date": "2018-05-10T16:27:01",
      "content": "<p>Hey, that's a nice script. I love little kernels like that! Here's mine:</p>\n\n<p><img src=\"https://i.imgur.com/AOal5Re.png\" alt=\"enter image description here\"></p>",
      "votes": 4,
      "replies": [
        {
          "id": 327052,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-10T18:42:21.273000",
          "content": "<p>Looks good to me, we all know what the last day drop means... Plus you got a great haul of discussion points from that, currently <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182\">4th most popular post</a> for the competition - congrats :)</p>",
          "votes": 2,
          "replies": []
        }
      ]
    },
    {
      "id": 326995,
      "author_name": "James Trotman",
      "author_url": "",
      "post_date": "2018-05-10T16:18:43.333000",
      "content": "<p>Here’s mine to start off with – <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56571\">fuller write-up</a> <strike>still to come…</strike></p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/326995/9398/jt_public_lb.png\" alt=\"JT public LB\"></p>\n\n<p>Edit: In short, I started off with some old categorical neural network code in the first week – managed to get top 13 then went back to the <a href=\"https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge\">Toxic Comments</a> competition. You can see when the better Kernels start to be shared a couple of days later, the score really starts to slide. The zig-zags are all from single lightgbm models, with poor leaderboard correlation until the <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56571\">last two days</a>.</p>",
      "votes": 4,
      "replies": [
        {
          "id": 327041,
          "author_name": "CPMP",
          "author_url": "",
          "post_date": "2018-05-10T18:16:55.317000",
          "content": "<blockquote>\n  <p>fuller writeup still to come…</p>\n</blockquote>\n\n<p>Can't wait....</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 327051,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-10T18:37:47.690000",
          "content": "<p>Ha, don't get too excited, I'm struggling for things to say that have not been shared already :) I have no killer tips, just odds and ends. I loved your write-up - very extensive, and I'm <strong>still</strong> smiling about the \"solo fools\" comment, congrats on your second solo gold from a (mostly silver) fellow solo fool :D</p>\n\n<p>(<a href=\"https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259560\">My prediction</a> from five months ago is looking really good!)</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 327061,
          "author_name": "CPMP",
          "author_url": "",
          "post_date": "2018-05-10T19:03:32.867000",
          "content": "<p>I can make the <a href=\"https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259569\">same answer</a> as well!</p>\n\n<p>Your jump from public to private is a sign of your sound approach.  </p>\n\n<p>It is not the first time.  This clearly shows luck does not play a role in your results.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 327294,
          "author_name": "CPMP",
          "author_url": "",
          "post_date": "2018-05-11T07:43:35.917000",
          "content": "<p>You also made <a href=\"https://www.kaggle.com/c/santa-gift-matching/discussion/45955#259542\">another prediction</a> that almost came true here!</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 327443,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-11T15:06:40.800000",
          "content": "<p>It is really interesting. I was thinking then about how fragile the whole setup can be, where one defector can ruin the concept.</p>\n\n<p>I posted an <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182#325640\">idea in the middle of the megathread</a> about implicit team merging - identical CSV files are a special case of highly correlated submissions that it would be quite easy to address, by merging them into one implicit team.</p>\n\n<p>Identical submissions are easy to detect but once you look at high correlations it becomes shades of grey, harder to make policies. (Also I can't recall seeing so few leaderboard removals from a competition as this one, my guess is, since scoring takes four minutes or so, and the <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/51877#295772\">system cannot take the original test set</a>, the cheater detection system is perhaps not efficient enough to run in the time available?!)</p>\n\n<p>To some extent the sharing problem is self balancing - I can't recall the top 5 ever sharing a crucial secret, or the top 10, except perhaps in <a href=\"https://www.kaggle.com/c/quora-question-pairs/discussion/33801\">Quora</a>, but top 100 tips are fairly regular, so those still leave a huge majority of people affected by it and very disappointed - it looks like Dirk deleted his account after the negative feedback. So it won't be him next time ;)</p>\n\n<p>It is hard for Kaggle... Competitors and sponsors have different goals - I think ideas to lock things down a bit in the last week are good, but I'm not sure a competition sponsor would like the idea of limiting progress...</p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 327446,
          "author_name": "CPMP",
          "author_url": "",
          "post_date": "2018-05-11T15:09:58.900000",
          "content": "<p>I like your mega team idea: identical subs should be merged into one team.  Simple and efficient.  It should make people think twice about reusing a kernel output as it.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 327447,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-11T15:15:34.200000",
          "content": "<p>Yes, I forgot to add that obviously it just shifts the problem along a bit, people add noise, change single rows or average with other subs, but it often surprises me how large the clumps of identical scores are, and even if those clumps were merged into teams and had lower points I'd bet some people would still do it.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 327454,
          "author_name": "CPMP",
          "author_url": "",
          "post_date": "2018-05-11T15:32:13.167000",
          "content": "<p>Yes, but at least it impacts people outside the mega team by only one rank shift instead of a very large number.  And yes, it can be defeated by modifying the submission.  At least it filters out the cut and paste specialists who are a plague here.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 328357,
      "author_name": "Cheng",
      "author_url": "",
      "post_date": "2018-05-14T04:09:40.057000",
      "content": "<p>That is interesting!\n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328357/9420/lb.png\" alt=\"enter image description here\"></p>",
      "votes": 1,
      "replies": [
        {
          "id": 328431,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-14T10:00:59.457000",
          "content": "<p>Congrats on the gold finish! Also, since the dynamic leaderboard pages only load the top 50 by default, it's a nice achievement to stay on the 'front page' of the leaderboard for so long :)</p>\n\n<p>I'm curious to know more about your solution, e.g. were matrix factorizations part of it or did you have other techniques?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 328624,
          "author_name": "Cheng",
          "author_url": "",
          "post_date": "2018-05-14T18:19:42.227000",
          "content": "<p>My solution is nothing special, so I didn't post it. Around 40 simple features (most of them can be found in kernels) and carefully tuned lightgbm. Single model, no ensemble, no ordering trick.</p>",
          "votes": 4,
          "replies": []
        }
      ]
    },
    {
      "id": 327860,
      "author_name": "Araks Stepanyan",
      "author_url": "",
      "post_date": "2018-05-12T17:40:51.857000",
      "content": "<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/327860/9408/__results___4_1.png\" alt=\"\"> Here is our story</p>",
      "votes": 1,
      "replies": [
        {
          "id": 327898,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-12T21:06:56.850000",
          "content": "<p>Hi Araks - You got some well earned discussion medals from this competition, I liked your <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/forums/t/52927/from-100k-to-100mm-rows\">From 100k to 100MM rows</a> post early on.</p>\n\n<p>The graph looks like a nice progression to me, you mentioned elsewhere that your private leaderboard drop <strong>is partly*  due to</strong> <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/forums/t/56241/130-copied-submissions-in-silver-and-bronze?forumMessageId=326323#post326323\">not selecting two submissions</a>, which is a vital part of every competition... play some more and you may see how frustrating a process it can be...</p>\n\n<p>There are a lot of good threads in different competitions about this public → private shake-up, a particularly good one is the <a href=\"https://www.kaggle.com/c/bosch-production-line-performance/discussion/24961\">Shake-up???</a> thread by @BreakfastPirate in the Bosch competition.</p>\n\n<p>My favourite <a href=\"https://www.kaggle.com/c/bosch-production-line-performance/discussion/24961#144008\">comment there</a> is quoted below... (it may take you some more competitions to find this as funny as long time Kagglers will :)</p>\n\n<blockquote>\n  <p><strong>BreakfastPirate wrote</strong></p>\n  \n  <p>When you select your 2 submissions, choose wisely. Don't choose poorly. There is a lot of Kaggle-wisdom in this video clip: <a href=\"https://www.youtube.com/watch?v=A0TalLrtZ24&amp;t=0m51s\">https://www.youtube.com/watch?v=A0TalLrtZ24&amp;t=0m51s</a></p>\n</blockquote>\n\n<h3>EDIT *</h3>\n\n<p>I agree <strong><em>100%</em></strong> with your comment below, I was trying to focus on positives, but you're right, for example there are <strong><em>113</em></strong> teams ahead of you with a score of <strong><em>0.982062</em></strong> from a blending kernel, which frankly <strong><em>sucks</em></strong>. They should <a href=\"https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56182#325640\">share one rank</a> and you should get a medal :)</p>\n\n<p>But on the positive side again, sharing insightful posts during a competition is <strong><em>far</em></strong> stronger evidence of honest hard work at trying to understand the problem and find a good model, so congrats on that :)</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 327931,
          "author_name": "Araks Stepanyan",
          "author_url": "",
          "post_date": "2018-05-13T00:41:13.287000",
          "content": "<p>Hi @James, thanks for looking at our progress carefully. Not selecting submissions was a huge mistake which I will try to correct next time. Another mistake would be putting too much pressure on the last days. And another mistake would be not selecting features wisely. Another mistake...</p>\n\n<p>Eventually, we all know the biggest reason why we had such a big drop and didn't get a medal, the last day kernels. I would be much happier to see it mentioned in your message above as well. Because if we don't acknowledge that there was such a thing, we will not form a community where everyone is ready to ignore the last day kernels even if those kernels ​are scoring high.</p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 329197,
          "author_name": "Araks Stepanyan",
          "author_url": "",
          "post_date": "2018-05-16T00:49:06.450000",
          "content": "<p>Thanks for the edit, @James. I totally understood why you didn't mention it at first. And I see that you talk about it a lot. The thing is, I am also trying to focus on the positive but this time I am not able to forget the negative very quickly and want everyone to remember it with me, haha. I needed a medal for my resume (and only for that, honestly). So now I hope that at least the tremendous learning experience will pay off. </p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 329201,
          "author_name": "Araks Stepanyan",
          "author_url": "",
          "post_date": "2018-05-16T00:52:27.620000",
          "content": "<p>By the way, I have already upvoted your comment about sharing one rank and it is a very clever solution to this situation.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 329538,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-16T17:03:33.860000",
          "content": "<p>I hope it does pay off for you, despite the drawbacks of disruptive late sharing Kaggle is still a great site to try things out and learn.</p>\n\n<p><em>Practice makes perfect</em> and if you come back and try another competition you'll already be ahead of the <a href=\"https://www.kaggle.com/mlearn/user-engagement-on-kaggle-competitions\">many people who do only one competition</a> (interesting kernel), it's only a relatively small number of us (odd) heavy users that keep coming back for more :)</p>\n\n<p>(Also - you can still make submissions after the competition, so you can see which of the shared ideas work best with your features. In some way it's <em>more</em> worthwhile - after deadline day you're obviously not doing it for the medal, purely for the knowledge...)</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 330089,
      "author_name": "Shawn Xiao",
      "author_url": "",
      "post_date": "2018-05-18T02:55:24.413000",
      "content": "<p>Nice script! Here is mine:</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/330089/9443/ShawnXiao.png\" alt=\"ShawnXiao\"></p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 328217,
      "author_name": "Vikas Pandey",
      "author_url": "",
      "post_date": "2018-05-13T17:36:15.147000",
      "content": "<p>Great Script!! Here is our Public LB Journey. were constantly in Top 150, before high score kernel sharing. Also better submission selection would have us within ~100. \n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328217/9421/__results___4_1.png\" alt=\"Here is our Public LB Journey\"></p>",
      "votes": 2,
      "replies": [
        {
          "id": 328257,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-13T20:01:00.463000",
          "content": "<p>Thanks for sharing Vikas - lots of up-ticks in the graph there, makes me think that a metric that summarizes the gradients in the line would be another indicator of performance and/or effort...</p>\n\n<p>Actually, I see you have made a <a href=\"https://www.kaggle.com/vikasp/talkingdata-public-lb-progression-my-team\">public fork</a> of the kernel and linked to the image output, which due to a Kaggle bug stops working after a short while. I definitely saw the graph on this page earlier but now I see the img alt-text \"Here is our Public LB Journey\"...</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 328362,
          "author_name": "Vikas Pandey",
          "author_url": "",
          "post_date": "2018-05-14T04:21:00.880000",
          "content": "<p>Thanks for the tip, fixed :)</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 333288,
          "author_name": "Mayank Soni",
          "author_url": "",
          "post_date": "2018-05-24T20:01:52.083000",
          "content": "<p>This script is a such a relief , i know people with 3 submissions and a bronze , waiting for them to publish the LB journey.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 327495,
      "author_name": "Bruno16",
      "author_url": "",
      "post_date": "2018-05-11T17:21:47.707000",
      "content": "<p>Hi my evolution , downhill</p>",
      "votes": 2,
      "replies": [
        {
          "id": 327532,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-11T19:42:41.973000",
          "content": "<p>Hi Bruno16 - thanks for sharing, although I can't see an image in your post, I still have the notebook open so I've just generated it myself - some nice leaps up the order there :)</p>\n\n<p><img src=\"https://i.imgur.com/4nCdMN4.png\" alt=\"Bruno16 - TalkingData AdTracking Fraud Detection Challenge - Public LB Rank\"></p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 327735,
          "author_name": "Bruno16",
          "author_url": "",
          "post_date": "2018-05-12T09:52:56.190000",
          "content": "<p>Thanks James, the upload button was not working...</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 327055,
      "author_name": "steubk",
      "author_url": "",
      "post_date": "2018-05-10T18:51:13.530000",
      "content": "<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/327055/9402/index.png\" alt=\"enter image description here\">very nice kernel James!</p>",
      "votes": 2,
      "replies": [
        {
          "id": 327103,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-10T20:21:56.263000",
          "content": "<p>Thanks <a href=\"/steubk\">@steubk</a>! That's a really consistent performance, and it makes me realise version 2 should have markers indicating when a team's actual submissions are made. In many other plots the time of most submissions are obvious from the up-tick in the line but from your graph I can't tell. That would make for another possible metric of performance - leaderboard rank drift over time vs submission rate...</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 327019,
      "author_name": "CPMP",
      "author_url": "",
      "post_date": "2018-05-10T17:25:34.460000",
      "content": "<p>Great, thanks.  Here is mine.  I think the drop is when I worked on DSB competition.</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/327019/9401/cpmp.png\" alt=\"enter image description here\"></p>",
      "votes": 2,
      "replies": [
        {
          "id": 327038,
          "author_name": "Antonis Maronikolakis",
          "author_url": "",
          "post_date": "2018-05-10T18:11:39.277000",
          "content": "<p>Ha, I was beating you so badly on 2018-03-23, you noob!</p>\n\n<p><em>cries at the corner of shower</em></p>",
          "votes": 2,
          "replies": []
        }
      ]
    },
    {
      "id": 328135,
      "author_name": "Shinan Xu",
      "author_url": "",
      "post_date": "2018-05-13T13:01:48.457000",
      "content": "<p>Nice kernel. Here's my first Kaggle competition.\n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328135/9415/leaderboard.png\" alt=\"enter image description here\"></p>",
      "votes": 1,
      "replies": [
        {
          "id": 328206,
          "author_name": "James Trotman",
          "author_url": "",
          "post_date": "2018-05-13T16:57:14.457000",
          "content": "<p>Congrats on getting a silver in your first competition, you managed to out-score the blenders and Dirk's army :)</p>\n\n<p>Also, you must have used a more recent copy of <em>talkingdata-adtracking-fraud-detection-publicleaderboard.csv</em> (the file keeps growing as people keep submitting after the competition), so your graph extends a bit longer than the May 8th deadline. I've added a fix above and in the <a href=\"https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time\">kernel</a>.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 328218,
          "author_name": "Shinan Xu",
          "author_url": "",
          "post_date": "2018-05-13T17:38:41.180000",
          "content": "<p>Thanks James. \nI've fixed it.\n<img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/328135/9418/leaderboard_5.8.png\" alt=\"enter image description here\"></p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 327010,
      "author_name": "",
      "author_url": "",
      "post_date": "2018-05-10T17:01:28.250000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "326994": "So, the leaderboard ended up quite distorted, and some people are unhappy. Here is a way to show that at least you were up there in the gold/silver/bronze zones (or top 50%, or at least higher than you ended up) at some point in time…\n\nIt turns out to be very easy to reconstruct the public leaderboard at any point in time using a few lines of Pandas. For newbies/those who haven’t noticed, all submissions that improve on the public LB are summarized [here][1] - linked from the [leaderboard page][2] - every row in that CSV creates a new public LB ordering. If you select by a time cutoff, then groupby teams and take the max submission score for each, and rank that, you end up with a snapshot of the public LB. I’ve put a [kernel here][3] to make it easy… The script is:\n\n    %matplotlib inline\n    import pandas as pd, numpy as np\n    \n    s = pd.read_csv('talkingdata-adtracking-fraud-detection-publicleaderboard.csv',\n                     parse_dates=['SubmissionDate'])\n    cut = pd.to_datetime('2018-05-08')\n    s = s.loc[s.SubmissionDate&lt;=cut] # omit post competition subs\n    s['doy'] = s.SubmissionDate.dt.dayofyear\n    \n    doy2date = s.groupby('doy').SubmissionDate.max().dt.date.to_dict()\n    days = np.unique(s.doy.values)\n    \n    def leaderboard(doy):\n        return s.loc[s.doy&lt;=doy].groupby('TeamName').Score.max().rank(ascending=False)\n    \n    def leaderboard_rank(doy, team):\n        return leaderboard(doy).get(team)\n    \n    def chart_public_lb(team):\n        ser = pd.Series({doy2date[doy]:leaderboard_rank(doy, team) for doy in days})\n        p = ser.plot(figsize=(12,5))\n        p.set_title(team + ' - TalkingData AdTracking Fraud Detection Challenge'\n                         + ' - Public LB Rank')\n        p.invert_yaxis()\n        p.grid(True)\n        p.set_ylim(top=0)\n        return p\n    \n    chart_public_lb('Dilbert') # put team name here\n\nThere might be slight inaccuracies due to team ups, but it looks correct to me, and tells the gist of the story. (Should work for any competition shorter than a year, if it's longer you can modify it to select by dates instead of day-of-year.)\n\nI’ve plotted a bunch out of curiosity and it looks like there are a lot of interesting stories out there. Some end badly. Some have a happy ending. Many show how viciously relentless the pace of Kaggle competitions can be – stop submitting and you’ll slide quite far quite fast ;)\n\nI’ll post only my own here – and to keep a positive spin on it I think it would be nicer if people stick to sharing their own journey, rather than using it to point out other people who mysteriously join &amp; leap into the medals in the dying moments &gt;:S\n\nFor what it’s worth, I’m always impressed by people posting strong submissions early on in the competition, especially the first few days – it is more likely to be the result of your own work and not cheap click &amp; submit or blending kernels (not that that's all bad, you can learn some things that way...) Or perhaps, having had the luck to have worked on a very similar task before. Either way I’m sure some people would like to be able to document that… especially if you use it to illustrate an explanation of what you did.\n\nTo share here, you can fork my [kernel][3] and link to it, or put the graphic here.\n\nSome instructions:\n\n - In kernel, right click graph → Save Image As… → Save the png.\n - Attach png to your discussion post, click Post Comment.\n - Right click the http link to the png in your post → Copy Link Location…\n - Edit your comment, insert an image, paste the URL you copied.\n\n  [1]: https://www.kaggle.com/c/8540/publicleaderboarddata.zip\n  [2]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/leaderboard\n  [3]: https://www.kaggle.com/jtrotman/show-your-public-lb-progression-over-time",
    "328474": "It's a sad story. Middle drop due to some personal business. Final drop due to high score kernel sharing. \n![enter image description here][1]\nNice script.\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328474/9422/TalkingData.png",
    "327000": "Hey, that's a nice script. I love little kernels like that! Here's mine:\n\n![enter image description here][1]\n\n\n  [1]: https://i.imgur.com/AOal5Re.png",
    "326995": "Here’s mine to start off with – [fuller write-up][1] <strike>still to come…</strike>\n\n![JT public LB][2]\n\nEdit: In short, I started off with some old categorical neural network code in the first week – managed to get top 13 then went back to the [Toxic Comments][3] competition. You can see when the better Kernels start to be shared a couple of days later, the score really starts to slide. The zig-zags are all from single lightgbm models, with poor leaderboard correlation until the [last two days][4].\n\n\n  [1]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56571\n  [2]: https://kaggle2.blob.core.windows.net/forum-message-attachments/326995/9398/jt_public_lb.png\n  [3]: https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge\n  [4]: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56571",
    "328357": "That is interesting!\n![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328357/9420/lb.png",
    "327860": "![][1] Here is our story\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/327860/9408/__results___4_1.png",
    "330089": "Nice script! Here is mine:\n\n![ShawnXiao][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/330089/9443/ShawnXiao.png",
    "328217": "Great Script!! Here is our Public LB Journey. were constantly in Top 150, before high score kernel sharing. Also better submission selection would have us within ~100. \n![Here is our Public LB Journey][1]\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328217/9421/__results___4_1.png",
    "327495": "Hi my evolution , downhill",
    "327055": "![enter image description here][1]very nice kernel James!\n\n\n  [1]: https://kaggle2.blob.core.windows.net/forum-message-attachments/327055/9402/index.png",
    "327019": "Great, thanks.  Here is mine.  I think the drop is when I worked on DSB competition.\n\n![enter image description here][1]\n\n\n  [1]: https://kaggle2.blob.core.windows.net/forum-message-attachments/327019/9401/cpmp.png",
    "328135": "Nice kernel. Here's my first Kaggle competition.\n![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/328135/9415/leaderboard.png",
    "327010": ""
  }
}