{
  "id": 91683,
  "title": "2nd Place Solution",
  "content": "<p>Thank you Kaggle for a fun competition and thank you Kagglers for fun and stimulating discussions/kernels. My final model is a classification hyperplane that uses 15 features:</p>\n\n<pre><code>pred = sigmoid( -0.0661x_16 + 0.178x_33 + -0.0526x_45 + -0.0736x_63 + 0.171x_65 + -0.105x_73 + -0.118x_91 + 0-0.0446x_108 + -0.0984x117 + 0.0462x164 + -0.0513x_189 + 0.112x_199 + -0.0704x_209 + -0.120x_217 + -0.0455x_239 )\n</code></pre>\n\n<p>This hyperplane was found by performing logistic regression with L1-penalty on the 2225 observations in the public test dataset combined with the training dataset using LB probes. It achieves CV 0.914, LB 0.890, and Private score 0.869. The solution would be more accurate if I had two more weeks to allow the LB-probe regression iteration to converge.</p>\n\n<p>To find coefficient <code>a_33</code> (the coefficient in front of <code>x_33</code>) you execute and submit the following code:</p>\n\n<pre><code>var = 33\ntest = pd.read_csv('test.csv')\nsub = pd.read_csv('sample_submission.csv')\nsub['target'] = test[str(var)]\nsub.to_csv('submission'+str(var)+'.csv',index=False)\n</code></pre>\n\n<p><img src=\"http://playagricola.com/Kaggle/sub33.jpg\" alt=\"image\"></p>\n\n<p>Then the value of <code>a_33</code> is computed by</p>\n\n<pre><code> a_33 = LB_SCORE_33 − 0.500 = 0.671 − 0.500 = 0.171\n</code></pre>\n\n<p>In the past 10 days, I was only able to compute 50 coefficients. The remaining 250 coefficients have been set to zero. To prevent overfitting, I (1) modify <code>a_k</code> based on the training data and (2) set all <code>a_k</code> with <code>abs(a_k)&amp;lt;0.04</code> equal to <code>a_k=0</code> because it was shown <a href=\"https://www.kaggle.com/cdeotte/can-we-trust-cv-and-lb\">here</a> that we cannot be confident that a variable is <strong>useful</strong> in this situation.</p>\n\n<p>A full explanation of my LB-probing techinque with code and simulation is posted <a href=\"https://www.kaggle.com/cdeotte/lb-probing-strategies-0-890-2nd-place/\">here</a>. I look forward to reading other Kaggler's solutions. Please share.</p>\n\n<p>UPDATE: A pictorial / mathematical explanation why <code>a_k = AUC - 0.5</code> is posted <a href=\"https://www.kaggle.com/c/dont-overfit-ii/discussion/92565\">here</a>.</p>",
  "comments": [
    {
      "id": 528532,
      "author_name": "John",
      "author_url": "",
      "post_date": "2019-05-08T03:09:29.963000",
      "content": "<p>Thanks for sharing. I have a question about \"a_33 = LB_SCORE_33 − 0.500 = 0.671 − 0.500 = 0.171\". Why this work? How can we prove that?</p>",
      "votes": 5,
      "replies": [
        {
          "id": 528589,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-08T06:14:01.897000",
          "content": "<p>Hi John. Since the competition metric is AUC, the actual value of <code>a_33</code> doesn't matter. We just need the ratio of <code>a_33</code> divided by each other <code>a_k</code> to be correct. It turns out that the ratio of <code>AUC_33 - 0.5</code> divided by <code>AUC_k - 0.5</code> is approximately equal to that ratio. Therefore using <code>AUC_k - 0.5</code> as a proxy for <code>a_k</code> works.</p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 529153,
          "author_name": "John",
          "author_url": "",
          "post_date": "2019-05-09T09:55:36.350000",
          "content": "<p>Thanks a lot~</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 532886,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-18T01:03:22.920000",
          "content": "<p>Hi <a href=\"/john159151\">@john159151</a> , I posted the mathematics explaining why <code>a_k = AUC - 0.5</code> <a href=\"https://www.kaggle.com/c/dont-overfit-ii/discussion/92565\">here</a>.  </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 533619,
          "author_name": "John",
          "author_url": "",
          "post_date": "2019-05-19T16:11:16.453000",
          "content": "<p>Great. Thanks</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 528547,
      "author_name": "Giba",
      "author_url": "",
      "post_date": "2019-05-08T03:59:58.223000",
      "content": "<p>That's amazing Chris.  Definitely LB probing is a skill that all Kagglers must have. Thanks for sharing your solution.</p>",
      "votes": 3,
      "replies": [
        {
          "id": 528596,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-08T06:30:16.100000",
          "content": "<p>Thanks Giba. This comp encouraged me to explore LB probing techniques. I'm excited with my results. I learned a lot including that creating synthetic data and running simulations is very helpful for optimizing techniques.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 535361,
      "author_name": "Marcos Azvdo",
      "author_url": "",
      "post_date": "2019-05-22T18:51:49.290000",
      "content": "<p>Very Nice!! Congrats!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 534724,
      "author_name": "Rashidul H",
      "author_url": "",
      "post_date": "2019-05-21T18:31:08.073000",
      "content": "<p><strong>Congrats!</strong></p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 533856,
      "author_name": "mcpongg",
      "author_url": "",
      "post_date": "2019-05-20T06:40:00.590000",
      "content": "<p>Awesome 👍🏻</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 531969,
      "author_name": "Saikat Biswas",
      "author_url": "",
      "post_date": "2019-05-16T00:13:22.580000",
      "content": "<p>Learning a lot from your kernal. Thank you for sharing</p>",
      "votes": 1,
      "replies": [
        {
          "id": 532235,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-16T13:40:46.090000",
          "content": "<p>Thanks Saikat</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 531958,
      "author_name": "Vanessa Martins",
      "author_url": "",
      "post_date": "2019-05-15T23:26:12.490000",
      "content": "<p>congrats!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 531931,
      "author_name": "flych3r",
      "author_url": "",
      "post_date": "2019-05-15T20:45:28.003000",
      "content": "<p>nice</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 531913,
      "author_name": "Gregory H Eales",
      "author_url": "",
      "post_date": "2019-05-15T19:30:33.613000",
      "content": "<p>Really cool!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 531659,
      "author_name": "mcpongg",
      "author_url": "",
      "post_date": "2019-05-15T09:52:46.043000",
      "content": "<p>Awesome!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 530750,
      "author_name": "Lesha Bardyshev",
      "author_url": "",
      "post_date": "2019-05-13T15:34:26.793000",
      "content": "<p>cool!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 530623,
      "author_name": "databender",
      "author_url": "",
      "post_date": "2019-05-13T09:49:43.063000",
      "content": "<p>Congratulations <a href=\"/cdeotte\">@cdeotte</a>  👍 </p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 530398,
      "author_name": "ankit",
      "author_url": "",
      "post_date": "2019-05-12T17:44:46.713000",
      "content": "<p>If you had more time to compute the rest 250, who knows? :)</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 529763,
      "author_name": "Prashali Shinde",
      "author_url": "",
      "post_date": "2019-05-10T17:19:04.347000",
      "content": "<p>VERY GOOD!!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 529534,
      "author_name": "Akhilesh",
      "author_url": "",
      "post_date": "2019-05-10T06:30:06.870000",
      "content": "<p>The idea of just using that 15 dimensional hyperplane is in itself brilliant!!!!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 532233,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-16T13:34:17.077000",
          "content": "<p>Thank you</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 529370,
      "author_name": "Kirill Talalaev",
      "author_url": "",
      "post_date": "2019-05-09T18:30:12.910000",
      "content": "<p>Nice!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 529335,
      "author_name": "Akhilesh",
      "author_url": "",
      "post_date": "2019-05-09T17:12:27.203000",
      "content": "<p>Congratulations Chris. You are taking things one competition at a time and you are doing great!!!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 529079,
      "author_name": "Kha Vo",
      "author_url": "",
      "post_date": "2019-05-09T06:47:12.623000",
      "content": "<p>This competition should be renamed to “Please overfit II” :)</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 529028,
      "author_name": "WhiteLord",
      "author_url": "",
      "post_date": "2019-05-09T03:35:15.823000",
      "content": "<p>Congratulations, and thank you for sharing the insight of your solution. ;D</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 528887,
      "author_name": "Arthur Paulino",
      "author_url": "",
      "post_date": "2019-05-08T21:02:59.963000",
      "content": "<p>There are some precious jewels here. I'll read everything carefully.</p>\n\n<p>Thank you, <a href=\"/cdeotte\">@cdeotte</a>!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 528971,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-09T01:10:51.623000",
          "content": "<p>Thanks Arthur</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 528651,
      "author_name": "Parul Garg",
      "author_url": "",
      "post_date": "2019-05-08T09:19:54.843000",
      "content": "<p>Nice share</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 528643,
      "author_name": "Pascal Pfeiffer",
      "author_url": "",
      "post_date": "2019-05-08T08:43:59.663000",
      "content": "<p>Congratulations to your 2nd place, Chris.</p>\n\n<p>Amazing solution. Thank you for sharing!\nThe way you probe the LB to get the coefficients is genious. </p>",
      "votes": 1,
      "replies": [
        {
          "id": 528739,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-08T13:23:28.520000",
          "content": "<p>Thanks Ilu !</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 528600,
      "author_name": "AleksanderMendyk",
      "author_url": "",
      "post_date": "2019-05-08T06:33:57.353000",
      "content": "<p>Congratulations and thank you for sharing</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 528599,
      "author_name": "Gilles Vandewiele",
      "author_url": "",
      "post_date": "2019-05-08T06:32:34.430000",
      "content": "<p>Amazing trick! Love the simplicity of it :)</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 528570,
      "author_name": "Eric R",
      "author_url": "",
      "post_date": "2019-05-08T05:15:20.810000",
      "content": "<p>Congrats! I'm also curious about the math, why variable-wise probing works.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 528601,
          "author_name": "Gilles Vandewiele",
          "author_url": "",
          "post_date": "2019-05-08T06:34:26.057000",
          "content": "<p>The variables are normalized between 0 and 1, thus they can be used as \"predictions\". The AUC you get back from the LB gives some valuable information as this indicates the probability that the feature value of a randomly sampled positive datapoint is higher than the feature of a randomly sampled negative datapoint.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 528603,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-08T06:42:40.243000",
          "content": "<p>Hi Eric. A simple answer is: the only important thing in the hyperplane formula is the relative strength of the coefficients compared with the others. The ratio of the coefficients is roughly proportional to the ratio of their <code>AUC - 0.5</code>.  </p>\n\n<p>A more lengthy answer is: logistic regression is similar to naive Bayes. When the variables are independent (and uncorrelated), instead of building one model with 300 variables, you can build 300 models of 1 variable each and combine them. Finding the AUC of one variable at a time is like building one model at a time. Each model is <code>logit(p) = (AUC_k - 0.5)*x_k = a_k*x_k</code> and the ensemble of models is <code>logit(p) = a_0*x_0 + a_1*x_1 + .... + a_298*x_298 + a_299*x_299</code>. (We can ignore all the <code>bias</code> terms because the competition metric is AUC).</p>",
          "votes": 4,
          "replies": []
        },
        {
          "id": 528616,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-08T07:14:06.700000",
          "content": "<p>Since you asked with the word \"math\", I'll say an even lengthier answer :-) </p>\n\n<p>If you perform linear regression (which is similar to logistic regression) using matrix algebra, you put all the variables <code>x_0, x_1, ..., x_298, x_299</code> as 300 columns of a matrix <code>A</code>. Then you put the 300 unknown coefficients in a vector <code>u</code>. And you put all the targets in a vector <code>y</code>. Then you want to solve the matrix equation <code>Au = y</code>. The solution is <code>u = (AA^T)^(-1) * A^T * y</code>. The matrix <code>AA^T</code> is both the correlation and covariance matrix of the <code>x's</code> because all <code>x's</code> have mean 0 and std 1. If the variables are independent with no correlation, then the matrix <code>(AA^T)</code> is a diagonal matrix and it's inverse is diagonal. So each element of <code>u</code> can be found separately as <code>u_k = (A_k,k) ^(-1) * (A^T)_row-k * y</code>. This demonstrates how coefficients in multi-variable regression can be solved one at a time when the variables are independent and uncorrelated.</p>",
          "votes": 6,
          "replies": []
        },
        {
          "id": 532887,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-18T01:05:43.140000",
          "content": "<p>Hi Eric ( <a href=\"/vivaroma\">@vivaroma</a> ), above explains why you can calculate each <code>a_k</code> separately. I posted the mathematics explaining why <code>a_k = AUC - 0.5</code> <a href=\"https://www.kaggle.com/c/dont-overfit-ii/discussion/92565\">here</a>.  </p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 528533,
      "author_name": "Rob Mulla",
      "author_url": "",
      "post_date": "2019-05-08T03:10:47.307000",
      "content": "<p>Congrats Chris! As always your analysis is clearly explained and thoroughly thought through. This takes LB probing to a whole new level!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 528592,
          "author_name": "Chris Deotte",
          "author_url": "",
          "post_date": "2019-05-08T06:19:16.480000",
          "content": "<p>Thanks Rob. Yeah I had a lot of fun designing LB probing techniques for this competition. I created synthetic data and then tried out tons of LB probing strategies on the synthetic data to see what converges fastest and what doesn't overfit LB. I entered this comp 20 days ago. I used model 3 in my kernel <a href=\"https://www.kaggle.com/cdeotte/lb-probing-strategies-0-890-2nd-place\">here</a> for 10 days and got up to LB 0.875. Then I discovered model 4 which converges faster and doesn't overfit the public test dataset as much as model 3. In 10 days it got up to LB 0.890. </p>",
          "votes": 5,
          "replies": []
        }
      ]
    },
    {
      "id": 530289,
      "author_name": "DONXUX",
      "author_url": "",
      "post_date": "2019-05-12T12:14:27.233000",
      "content": "<p>good</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 530280,
      "author_name": "SaiAdityaGarlapati",
      "author_url": "",
      "post_date": "2019-05-12T11:38:28.027000",
      "content": "<p>Great!!</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 529105,
      "author_name": "Himanshu Soni",
      "author_url": "",
      "post_date": "2019-05-09T07:40:23.033000",
      "content": "<p>Nice and great effort Chris you have done LB probing very smartly and consistently you moved to get insights of various features, your ideas will help us to get good rank in another competition. </p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 528655,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-08T09:37:07.310000",
      "content": "",
      "votes": 2,
      "replies": [
        {
          "id": 529506,
          "author_name": "",
          "author_url": "",
          "post_date": "2019-05-10T04:15:15.283000",
          "content": "",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 528625,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-08T07:41:58.083000",
      "content": "",
      "votes": 2,
      "replies": [
        {
          "id": 529010,
          "author_name": "",
          "author_url": "",
          "post_date": "2019-05-09T02:44:50.260000",
          "content": "",
          "votes": 2,
          "replies": []
        },
        {
          "id": 529019,
          "author_name": "",
          "author_url": "",
          "post_date": "2019-05-09T03:10:29.190000",
          "content": "",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 528620,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-08T07:17:05.170000",
      "content": "",
      "votes": 2,
      "replies": [
        {
          "id": 528974,
          "author_name": "",
          "author_url": "",
          "post_date": "2019-05-09T01:27:56.157000",
          "content": "",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 528535,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-08T03:24:31.137000",
      "content": "",
      "votes": 2,
      "replies": [
        {
          "id": 528593,
          "author_name": "",
          "author_url": "",
          "post_date": "2019-05-08T06:20:25.987000",
          "content": "",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3191826,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-05-02T07:33:40.847000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 529926,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-11T07:20:29.047000",
      "content": "",
      "votes": 1,
      "replies": []
    },
    {
      "id": 531972,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-16T00:16:26.747000",
      "content": "",
      "votes": 1,
      "replies": []
    },
    {
      "id": 531967,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-16T00:03:29.600000",
      "content": "",
      "votes": 1,
      "replies": []
    },
    {
      "id": 531523,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-15T04:14:10.740000",
      "content": "",
      "votes": 1,
      "replies": []
    },
    {
      "id": 530422,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-12T18:57:43.860000",
      "content": "",
      "votes": 1,
      "replies": []
    },
    {
      "id": 529063,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-09T05:24:59.747000",
      "content": "",
      "votes": 1,
      "replies": []
    },
    {
      "id": 528670,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-05-08T10:29:38.307000",
      "content": "",
      "votes": 1,
      "replies": []
    }
  ],
  "comment_count": 60,
  "messages": [
    {
      "id": 528513,
      "postDate": "2019-05-08T02:00:49.880Z",
      "content": "<p>Thank you Kaggle for a fun competition and thank you Kagglers for fun and stimulating discussions/kernels. My final model is a classification hyperplane that uses 15 features:</p>\n\n<pre><code>pred = sigmoid( -0.0661x_16 + 0.178x_33 + -0.0526x_45 + -0.0736x_63 + 0.171x_65 + -0.105x_73 + -0.118x_91 + 0-0.0446x_108 + -0.0984x117 + 0.0462x164 + -0.0513x_189 + 0.112x_199 + -0.0704x_209 + -0.120x_217 + -0.0455x_239 )\n</code></pre>\n\n<p>This hyperplane was found by performing logistic regression with L1-penalty on the 2225 observations in the public test dataset combined with the training dataset using LB probes. It achieves CV 0.914, LB 0.890, and Private score 0.869. The solution would be more accurate if I had two more weeks to allow the LB-probe regression iteration to converge.</p>\n\n<p>To find coefficient <code>a_33</code> (the coefficient in front of <code>x_33</code>) you execute and submit the following code:</p>\n\n<pre><code>var = 33\ntest = pd.read_csv('test.csv')\nsub = pd.read_csv('sample_submission.csv')\nsub['target'] = test[str(var)]\nsub.to_csv('submission'+str(var)+'.csv',index=False)\n</code></pre>\n\n<p><img src=\"http://playagricola.com/Kaggle/sub33.jpg\" alt=\"image\"></p>\n\n<p>Then the value of <code>a_33</code> is computed by</p>\n\n<pre><code> a_33 = LB_SCORE_33 − 0.500 = 0.671 − 0.500 = 0.171\n</code></pre>\n\n<p>In the past 10 days, I was only able to compute 50 coefficients. The remaining 250 coefficients have been set to zero. To prevent overfitting, I (1) modify <code>a_k</code> based on the training data and (2) set all <code>a_k</code> with <code>abs(a_k)&amp;lt;0.04</code> equal to <code>a_k=0</code> because it was shown <a href=\"https://www.kaggle.com/cdeotte/can-we-trust-cv-and-lb\">here</a> that we cannot be confident that a variable is <strong>useful</strong> in this situation.</p>\n\n<p>A full explanation of my LB-probing techinque with code and simulation is posted <a href=\"https://www.kaggle.com/cdeotte/lb-probing-strategies-0-890-2nd-place/\">here</a>. I look forward to reading other Kaggler's solutions. Please share.</p>\n\n<p>UPDATE: A pictorial / mathematical explanation why <code>a_k = AUC - 0.5</code> is posted <a href=\"https://www.kaggle.com/c/dont-overfit-ii/discussion/92565\">here</a>.</p>",
      "rawMarkdown": "Thank you Kaggle for a fun competition and thank you Kagglers for fun and stimulating discussions/kernels. My final model is a classification hyperplane that uses 15 features:\n\n    pred = sigmoid( -0.0661x_16 + 0.178x_33 + -0.0526x_45 + -0.0736x_63 + 0.171x_65 + -0.105x_73 + -0.118x_91 + 0-0.0446x_108 + -0.0984x117 + 0.0462x164 + -0.0513x_189 + 0.112x_199 + -0.0704x_209 + -0.120x_217 + -0.0455x_239 )\n\nThis hyperplane was found by performing logistic regression with L1-penalty on the 2225 observations in the public test dataset combined with the training dataset using LB probes. It achieves CV 0.914, LB 0.890, and Private score 0.869. The solution would be more accurate if I had two more weeks to allow the LB-probe regression iteration to converge.\n\nTo find coefficient `a_33` (the coefficient in front of `x_33`) you execute and submit the following code:\n\n    var = 33\n    test = pd.read_csv('test.csv')\n    sub = pd.read_csv('sample_submission.csv')\n    sub['target'] = test[str(var)]\n    sub.to_csv('submission'+str(var)+'.csv',index=False)\n\n![image](http://playagricola.com/Kaggle/sub33.jpg)\n\nThen the value of `a_33` is computed by\n\n     a_33 = LB_SCORE_33 − 0.500 = 0.671 − 0.500 = 0.171\n\nIn the past 10 days, I was only able to compute 50 coefficients. The remaining 250 coefficients have been set to zero. To prevent overfitting, I (1) modify `a_k` based on the training data and (2) set all `a_k` with `abs(a_k)&lt;0.04` equal to `a_k=0` because it was shown [here][1] that we cannot be confident that a variable is **useful** in this situation.\n\nA full explanation of my LB-probing techinque with code and simulation is posted [here][2]. I look forward to reading other Kaggler's solutions. Please share.\n\nUPDATE: A pictorial / mathematical explanation why `a_k = AUC - 0.5` is posted [here][3].\n\n[1]: https://www.kaggle.com/cdeotte/can-we-trust-cv-and-lb\n[2]: https://www.kaggle.com/cdeotte/lb-probing-strategies-0-890-2nd-place/\n[3]:https://www.kaggle.com/c/dont-overfit-ii/discussion/92565",
      "votes": 67
    },
    {
      "id": 528532,
      "postDate": "2019-05-08T03:09:29.963Z",
      "content": "<p>Thanks for sharing. I have a question about \"a_33 = LB_SCORE_33 − 0.500 = 0.671 − 0.500 = 0.171\". Why this work? How can we prove that?</p>",
      "rawMarkdown": "Thanks for sharing. I have a question about \"a_33 = LB_SCORE_33 − 0.500 = 0.671 − 0.500 = 0.171\". Why this work? How can we prove that?",
      "votes": 5,
      "replies": [
        {
          "id": 528589,
          "postDate": "2019-05-08T06:14:01.897Z",
          "content": "<p>Hi John. Since the competition metric is AUC, the actual value of <code>a_33</code> doesn't matter. We just need the ratio of <code>a_33</code> divided by each other <code>a_k</code> to be correct. It turns out that the ratio of <code>AUC_33 - 0.5</code> divided by <code>AUC_k - 0.5</code> is approximately equal to that ratio. Therefore using <code>AUC_k - 0.5</code> as a proxy for <code>a_k</code> works.</p>",
          "rawMarkdown": "Hi John. Since the competition metric is AUC, the actual value of `a_33` doesn't matter. We just need the ratio of `a_33` divided by each other `a_k` to be correct. It turns out that the ratio of `AUC_33 - 0.5` divided by `AUC_k - 0.5` is approximately equal to that ratio. Therefore using `AUC_k - 0.5` as a proxy for `a_k` works.",
          "votes": 2
        },
        {
          "id": 529153,
          "postDate": "2019-05-09T09:55:36.350Z",
          "content": "<p>Thanks a lot~</p>",
          "rawMarkdown": "Thanks a lot~",
          "votes": 1
        },
        {
          "id": 532886,
          "postDate": "2019-05-18T01:03:22.920Z",
          "content": "<p>Hi <a href=\"/john159151\">@john159151</a> , I posted the mathematics explaining why <code>a_k = AUC - 0.5</code> <a href=\"https://www.kaggle.com/c/dont-overfit-ii/discussion/92565\">here</a>.  </p>",
          "rawMarkdown": "Hi @john159151 , I posted the mathematics explaining why `a_k = AUC - 0.5` [here][1].  \n  \n[1]: https://www.kaggle.com/c/dont-overfit-ii/discussion/92565"
        },
        {
          "id": 533619,
          "postDate": "2019-05-19T16:11:16.453Z",
          "content": "<p>Great. Thanks</p>",
          "rawMarkdown": "Great. Thanks"
        }
      ]
    },
    {
      "id": 528547,
      "postDate": "2019-05-08T03:59:58.223Z",
      "content": "<p>That's amazing Chris.  Definitely LB probing is a skill that all Kagglers must have. Thanks for sharing your solution.</p>",
      "rawMarkdown": "That's amazing Chris.  Definitely LB probing is a skill that all Kagglers must have. Thanks for sharing your solution.",
      "votes": 3,
      "replies": [
        {
          "id": 528596,
          "postDate": "2019-05-08T06:30:16.100Z",
          "content": "<p>Thanks Giba. This comp encouraged me to explore LB probing techniques. I'm excited with my results. I learned a lot including that creating synthetic data and running simulations is very helpful for optimizing techniques.</p>",
          "rawMarkdown": "Thanks Giba. This comp encouraged me to explore LB probing techniques. I'm excited with my results. I learned a lot including that creating synthetic data and running simulations is very helpful for optimizing techniques.",
          "votes": 1
        }
      ]
    },
    {
      "id": 535361,
      "postDate": "2019-05-22T18:51:49.290Z",
      "content": "<p>Very Nice!! Congrats!</p>",
      "rawMarkdown": "Very Nice!! Congrats!",
      "votes": 1
    },
    {
      "id": 534724,
      "postDate": "2019-05-21T18:31:08.073Z",
      "content": "<p><strong>Congrats!</strong></p>",
      "rawMarkdown": "**Congrats!**",
      "votes": 1
    },
    {
      "id": 533856,
      "postDate": "2019-05-20T06:40:00.590Z",
      "content": "<p>Awesome 👍🏻</p>",
      "rawMarkdown": "Awesome 👍🏻",
      "votes": 1
    },
    {
      "id": 531969,
      "postDate": "2019-05-16T00:13:22.580Z",
      "content": "<p>Learning a lot from your kernal. Thank you for sharing</p>",
      "rawMarkdown": "Learning a lot from your kernal. Thank you for sharing",
      "votes": 1,
      "replies": [
        {
          "id": 532235,
          "postDate": "2019-05-16T13:40:46.090Z",
          "content": "<p>Thanks Saikat</p>",
          "rawMarkdown": "Thanks Saikat"
        }
      ]
    },
    {
      "id": 531958,
      "postDate": "2019-05-15T23:26:12.490Z",
      "content": "<p>congrats!</p>",
      "rawMarkdown": "congrats!",
      "votes": 1
    },
    {
      "id": 531931,
      "postDate": "2019-05-15T20:45:28.003Z",
      "content": "<p>nice</p>",
      "rawMarkdown": "nice",
      "votes": 1
    },
    {
      "id": 531913,
      "postDate": "2019-05-15T19:30:33.613Z",
      "content": "<p>Really cool!</p>",
      "rawMarkdown": "Really cool!",
      "votes": 1
    },
    {
      "id": 531659,
      "postDate": "2019-05-15T09:52:46.043Z",
      "content": "<p>Awesome!</p>",
      "rawMarkdown": "Awesome!",
      "votes": 1
    },
    {
      "id": 530750,
      "postDate": "2019-05-13T15:34:26.793Z",
      "content": "<p>cool!</p>",
      "rawMarkdown": "cool!",
      "votes": 1
    },
    {
      "id": 530623,
      "postDate": "2019-05-13T09:49:43.063Z",
      "content": "<p>Congratulations <a href=\"/cdeotte\">@cdeotte</a>  👍 </p>",
      "rawMarkdown": "Congratulations @cdeotte  👍 ",
      "votes": 1
    },
    {
      "id": 530398,
      "postDate": "2019-05-12T17:44:46.713Z",
      "content": "<p>If you had more time to compute the rest 250, who knows? :)</p>",
      "rawMarkdown": "If you had more time to compute the rest 250, who knows? :)",
      "votes": 1
    },
    {
      "id": 529763,
      "postDate": "2019-05-10T17:19:04.347Z",
      "content": "<p>VERY GOOD!!</p>",
      "rawMarkdown": "VERY GOOD!!",
      "votes": 1
    },
    {
      "id": 529534,
      "postDate": "2019-05-10T06:30:06.870Z",
      "content": "<p>The idea of just using that 15 dimensional hyperplane is in itself brilliant!!!!</p>",
      "rawMarkdown": "The idea of just using that 15 dimensional hyperplane is in itself brilliant!!!!",
      "votes": 1,
      "replies": [
        {
          "id": 532233,
          "postDate": "2019-05-16T13:34:17.077Z",
          "content": "<p>Thank you</p>",
          "rawMarkdown": "Thank you"
        }
      ]
    },
    {
      "id": 529370,
      "postDate": "2019-05-09T18:30:12.910Z",
      "content": "<p>Nice!</p>",
      "rawMarkdown": "Nice!",
      "votes": 1
    },
    {
      "id": 529335,
      "postDate": "2019-05-09T17:12:27.203Z",
      "content": "<p>Congratulations Chris. You are taking things one competition at a time and you are doing great!!!</p>",
      "rawMarkdown": "Congratulations Chris. You are taking things one competition at a time and you are doing great!!!\n",
      "votes": 1
    },
    {
      "id": 529079,
      "postDate": "2019-05-09T06:47:12.623Z",
      "content": "<p>This competition should be renamed to “Please overfit II” :)</p>",
      "rawMarkdown": "This competition should be renamed to “Please overfit II” :)",
      "votes": 1
    },
    {
      "id": 529028,
      "postDate": "2019-05-09T03:35:15.823Z",
      "content": "<p>Congratulations, and thank you for sharing the insight of your solution. ;D</p>",
      "rawMarkdown": "Congratulations, and thank you for sharing the insight of your solution. ;D",
      "votes": 1
    },
    {
      "id": 528887,
      "postDate": "2019-05-08T21:02:59.963Z",
      "content": "<p>There are some precious jewels here. I'll read everything carefully.</p>\n\n<p>Thank you, <a href=\"/cdeotte\">@cdeotte</a>!</p>",
      "rawMarkdown": "There are some precious jewels here. I'll read everything carefully.\n\nThank you, @cdeotte!",
      "votes": 1,
      "replies": [
        {
          "id": 528971,
          "postDate": "2019-05-09T01:10:51.623Z",
          "content": "<p>Thanks Arthur</p>",
          "rawMarkdown": "Thanks Arthur"
        }
      ]
    },
    {
      "id": 528651,
      "postDate": "2019-05-08T09:19:54.843Z",
      "content": "<p>Nice share</p>",
      "rawMarkdown": "Nice share",
      "votes": 1
    },
    {
      "id": 528643,
      "postDate": "2019-05-08T08:43:59.663Z",
      "content": "<p>Congratulations to your 2nd place, Chris.</p>\n\n<p>Amazing solution. Thank you for sharing!\nThe way you probe the LB to get the coefficients is genious. </p>",
      "rawMarkdown": "Congratulations to your 2nd place, Chris.\n\nAmazing solution. Thank you for sharing!\nThe way you probe the LB to get the coefficients is genious. ",
      "votes": 1,
      "replies": [
        {
          "id": 528739,
          "postDate": "2019-05-08T13:23:28.520Z",
          "content": "<p>Thanks Ilu !</p>",
          "rawMarkdown": "Thanks Ilu !"
        }
      ]
    },
    {
      "id": 528600,
      "postDate": "2019-05-08T06:33:57.353Z",
      "content": "<p>Congratulations and thank you for sharing</p>",
      "rawMarkdown": "Congratulations and thank you for sharing",
      "votes": 1
    },
    {
      "id": 528599,
      "postDate": "2019-05-08T06:32:34.430Z",
      "content": "<p>Amazing trick! Love the simplicity of it :)</p>",
      "rawMarkdown": "Amazing trick! Love the simplicity of it :)",
      "votes": 1
    },
    {
      "id": 528570,
      "postDate": "2019-05-08T05:15:20.810Z",
      "content": "<p>Congrats! I'm also curious about the math, why variable-wise probing works.</p>",
      "rawMarkdown": "Congrats! I'm also curious about the math, why variable-wise probing works.",
      "votes": 1,
      "replies": [
        {
          "id": 528601,
          "postDate": "2019-05-08T06:34:26.057Z",
          "content": "<p>The variables are normalized between 0 and 1, thus they can be used as \"predictions\". The AUC you get back from the LB gives some valuable information as this indicates the probability that the feature value of a randomly sampled positive datapoint is higher than the feature of a randomly sampled negative datapoint.</p>",
          "rawMarkdown": "The variables are normalized between 0 and 1, thus they can be used as \"predictions\". The AUC you get back from the LB gives some valuable information as this indicates the probability that the feature value of a randomly sampled positive datapoint is higher than the feature of a randomly sampled negative datapoint.",
          "votes": 1
        },
        {
          "id": 528603,
          "postDate": "2019-05-08T06:42:40.243Z",
          "content": "<p>Hi Eric. A simple answer is: the only important thing in the hyperplane formula is the relative strength of the coefficients compared with the others. The ratio of the coefficients is roughly proportional to the ratio of their <code>AUC - 0.5</code>.  </p>\n\n<p>A more lengthy answer is: logistic regression is similar to naive Bayes. When the variables are independent (and uncorrelated), instead of building one model with 300 variables, you can build 300 models of 1 variable each and combine them. Finding the AUC of one variable at a time is like building one model at a time. Each model is <code>logit(p) = (AUC_k - 0.5)*x_k = a_k*x_k</code> and the ensemble of models is <code>logit(p) = a_0*x_0 + a_1*x_1 + .... + a_298*x_298 + a_299*x_299</code>. (We can ignore all the <code>bias</code> terms because the competition metric is AUC).</p>",
          "rawMarkdown": "Hi Eric. A simple answer is: the only important thing in the hyperplane formula is the relative strength of the coefficients compared with the others. The ratio of the coefficients is roughly proportional to the ratio of their `AUC - 0.5`.  \n  \nA more lengthy answer is: logistic regression is similar to naive Bayes. When the variables are independent (and uncorrelated), instead of building one model with 300 variables, you can build 300 models of 1 variable each and combine them. Finding the AUC of one variable at a time is like building one model at a time. Each model is `logit(p) = (AUC_k - 0.5)*x_k = a_k*x_k` and the ensemble of models is `logit(p) = a_0*x_0 + a_1*x_1 + .... + a_298*x_298 + a_299*x_299`. (We can ignore all the `bias` terms because the competition metric is AUC).",
          "votes": 4
        },
        {
          "id": 528616,
          "postDate": "2019-05-08T07:14:06.700Z",
          "content": "<p>Since you asked with the word \"math\", I'll say an even lengthier answer :-) </p>\n\n<p>If you perform linear regression (which is similar to logistic regression) using matrix algebra, you put all the variables <code>x_0, x_1, ..., x_298, x_299</code> as 300 columns of a matrix <code>A</code>. Then you put the 300 unknown coefficients in a vector <code>u</code>. And you put all the targets in a vector <code>y</code>. Then you want to solve the matrix equation <code>Au = y</code>. The solution is <code>u = (AA^T)^(-1) * A^T * y</code>. The matrix <code>AA^T</code> is both the correlation and covariance matrix of the <code>x's</code> because all <code>x's</code> have mean 0 and std 1. If the variables are independent with no correlation, then the matrix <code>(AA^T)</code> is a diagonal matrix and it's inverse is diagonal. So each element of <code>u</code> can be found separately as <code>u_k = (A_k,k) ^(-1) * (A^T)_row-k * y</code>. This demonstrates how coefficients in multi-variable regression can be solved one at a time when the variables are independent and uncorrelated.</p>",
          "rawMarkdown": "Since you asked with the word \"math\", I'll say an even lengthier answer :-) \n  \nIf you perform linear regression (which is similar to logistic regression) using matrix algebra, you put all the variables `x_0, x_1, ..., x_298, x_299` as 300 columns of a matrix `A`. Then you put the 300 unknown coefficients in a vector `u`. And you put all the targets in a vector `y`. Then you want to solve the matrix equation `Au = y`. The solution is `u = (AA^T)^(-1) * A^T * y`. The matrix `AA^T` is both the correlation and covariance matrix of the `x's` because all `x's` have mean 0 and std 1. If the variables are independent with no correlation, then the matrix `(AA^T)` is a diagonal matrix and it's inverse is diagonal. So each element of `u` can be found separately as `u_k = (A_k,k) ^(-1) * (A^T)_row-k * y`. This demonstrates how coefficients in multi-variable regression can be solved one at a time when the variables are independent and uncorrelated.",
          "votes": 6
        },
        {
          "id": 532887,
          "postDate": "2019-05-18T01:05:43.140Z",
          "content": "<p>Hi Eric ( <a href=\"/vivaroma\">@vivaroma</a> ), above explains why you can calculate each <code>a_k</code> separately. I posted the mathematics explaining why <code>a_k = AUC - 0.5</code> <a href=\"https://www.kaggle.com/c/dont-overfit-ii/discussion/92565\">here</a>.  </p>",
          "rawMarkdown": "Hi Eric ( @vivaroma ), above explains why you can calculate each `a_k` separately. I posted the mathematics explaining why `a_k = AUC - 0.5` [here][1].  \n  \n[1]: https://www.kaggle.com/c/dont-overfit-ii/discussion/92565"
        }
      ]
    },
    {
      "id": 528533,
      "postDate": "2019-05-08T03:10:47.307Z",
      "content": "<p>Congrats Chris! As always your analysis is clearly explained and thoroughly thought through. This takes LB probing to a whole new level!</p>",
      "rawMarkdown": "Congrats Chris! As always your analysis is clearly explained and thoroughly thought through. This takes LB probing to a whole new level!",
      "votes": 1,
      "replies": [
        {
          "id": 528592,
          "postDate": "2019-05-08T06:19:16.480Z",
          "content": "<p>Thanks Rob. Yeah I had a lot of fun designing LB probing techniques for this competition. I created synthetic data and then tried out tons of LB probing strategies on the synthetic data to see what converges fastest and what doesn't overfit LB. I entered this comp 20 days ago. I used model 3 in my kernel <a href=\"https://www.kaggle.com/cdeotte/lb-probing-strategies-0-890-2nd-place\">here</a> for 10 days and got up to LB 0.875. Then I discovered model 4 which converges faster and doesn't overfit the public test dataset as much as model 3. In 10 days it got up to LB 0.890. </p>",
          "rawMarkdown": "Thanks Rob. Yeah I had a lot of fun designing LB probing techniques for this competition. I created synthetic data and then tried out tons of LB probing strategies on the synthetic data to see what converges fastest and what doesn't overfit LB. I entered this comp 20 days ago. I used model 3 in my kernel [here][1] for 10 days and got up to LB 0.875. Then I discovered model 4 which converges faster and doesn't overfit the public test dataset as much as model 3. In 10 days it got up to LB 0.890. \n  \n[1]: https://www.kaggle.com/cdeotte/lb-probing-strategies-0-890-2nd-place",
          "votes": 5
        }
      ]
    },
    {
      "id": 530289,
      "postDate": "2019-05-12T12:14:27.233Z",
      "content": "<p>good</p>",
      "rawMarkdown": "good",
      "votes": 2
    },
    {
      "id": 530280,
      "postDate": "2019-05-12T11:38:28.027Z",
      "content": "<p>Great!!</p>",
      "rawMarkdown": "Great!!",
      "votes": 2
    },
    {
      "id": 529105,
      "postDate": "2019-05-09T07:40:23.033Z",
      "content": "<p>Nice and great effort Chris you have done LB probing very smartly and consistently you moved to get insights of various features, your ideas will help us to get good rank in another competition. </p>",
      "rawMarkdown": "Nice and great effort Chris you have done LB probing very smartly and consistently you moved to get insights of various features, your ideas will help us to get good rank in another competition. ",
      "votes": 2
    },
    {
      "id": 528655,
      "postDate": "2019-05-08T09:37:07.310Z",
      "content": "<p>Awesome work and thanks for sharing your ideas now and throughout this competition!</p>",
      "rawMarkdown": "Awesome work and thanks for sharing your ideas now and throughout this competition!",
      "votes": 2,
      "replies": [
        {
          "id": 529506,
          "postDate": "2019-05-10T04:15:15.283Z",
          "content": "<p>Thanks Anna</p>",
          "rawMarkdown": "Thanks Anna"
        }
      ]
    },
    {
      "id": 528625,
      "postDate": "2019-05-08T07:41:58.083Z",
      "content": "<p>Congratulations and thanks for your great sharing!\nChris, it seems that you find a hyperplane which is used for classification.\nAnd I have some questions for it, if not mind could you explain it?\n1.  Have you tried to do some scalars or transformations to the data? Because I think the data is <strong>nearly standard normal</strong> distribution I will try to convert it into <strong>standard normal</strong> distribution. And in fact, after doing transformations, I get increased in CV, LB, and Private, which is considered as a way to denoise in my opinions.\n2. Have you tried to use some other models like <strong>SVC support vector classification</strong> and <strong>LDA naive Bayes</strong> that you said in your <a href=\"https://www.kaggle.com/cdeotte/lb-probing-strategies-0-890-2nd-place#Conclusion\">kernel</a>, which get better or worse performance than <strong>LR Logistic regression</strong>? And what makes you choose <strong>LR</strong> not other models.</p>\n\n<p>And thanks again to your outstanding ideas and great sharings since the Santander game!!!</p>",
      "rawMarkdown": "Congratulations and thanks for your great sharing!\nChris, it seems that you find a hyperplane which is used for classification.\nAnd I have some questions for it, if not mind could you explain it?\n1.  Have you tried to do some scalars or transformations to the data? Because I think the data is **nearly standard normal** distribution I will try to convert it into **standard normal** distribution. And in fact, after doing transformations, I get increased in CV, LB, and Private, which is considered as a way to denoise in my opinions.\n2. Have you tried to use some other models like **SVC support vector classification** and **LDA naive Bayes** that you said in your [kernel](https://www.kaggle.com/cdeotte/lb-probing-strategies-0-890-2nd-place#Conclusion), which get better or worse performance than **LR Logistic regression**? And what makes you choose **LR** not other models.\n\nAnd thanks again to your outstanding ideas and great sharings since the Santander game!!!",
      "votes": 2,
      "replies": [
        {
          "id": 529010,
          "postDate": "2019-05-09T02:44:50.260Z",
          "content": "<p>Thanks Bowen. (1) I have not tried transforming the data. I believe the data is already standard normal. (2) All three methods LR, SVC, and LDA find 300 <code>a_k</code> and predict with a hyperplane. I say that my method is similar to LR to give people a concrete method to compare with. However using AUC to calculate <code>a_k</code> is approximate and not exact. Therefore my solution is not exactly LR but rather probably a mixture of all three of these.</p>",
          "rawMarkdown": "Thanks Bowen. (1) I have not tried transforming the data. I believe the data is already standard normal. (2) All three methods LR, SVC, and LDA find 300 `a_k` and predict with a hyperplane. I say that my method is similar to LR to give people a concrete method to compare with. However using AUC to calculate `a_k` is approximate and not exact. Therefore my solution is not exactly LR but rather probably a mixture of all three of these.",
          "votes": 2
        },
        {
          "id": 529019,
          "postDate": "2019-05-09T03:10:29.190Z",
          "content": "<p>Thanks for your explanation, Chris.</p>",
          "rawMarkdown": "Thanks for your explanation, Chris.",
          "votes": 1
        }
      ]
    },
    {
      "id": 528620,
      "postDate": "2019-05-08T07:17:05.170Z",
      "content": "<p>Congrats, Chris. so the reason this approach works is because variables are independent? Do you think this would also work in Santander's then?</p>",
      "rawMarkdown": "Congrats, Chris. so the reason this approach works is because variables are independent? Do you think this would also work in Santander's then?",
      "votes": 2,
      "replies": [
        {
          "id": 528974,
          "postDate": "2019-05-09T01:27:56.157Z",
          "content": "<p>Thanks. This would work on Santander, however it wouldn't produce a high LB. This method is only a linear classifier and linear classifiers only scored around 0.850 on Santander. The winning solutions were nonlinear in each variable.</p>",
          "rawMarkdown": "Thanks. This would work on Santander, however it wouldn't produce a high LB. This method is only a linear classifier and linear classifiers only scored around 0.850 on Santander. The winning solutions were nonlinear in each variable.",
          "votes": 1
        }
      ]
    },
    {
      "id": 528535,
      "postDate": "2019-05-08T03:24:31.137Z",
      "content": "<p>Congratulations Chris and thanks for sharing your ideas behind this competition!!! </p>",
      "rawMarkdown": "Congratulations Chris and thanks for sharing your ideas behind this competition!!! ",
      "votes": 2,
      "replies": [
        {
          "id": 528593,
          "postDate": "2019-05-08T06:20:25.987Z",
          "content": "<p>Thanks</p>",
          "rawMarkdown": "Thanks",
          "votes": 1
        }
      ]
    },
    {
      "id": 3191826,
      "postDate": "2025-05-02T07:33:40.847Z",
      "content": "<p>Hello, sorry for commenting such an old solution, but why is the link of the submission in an online agricola webpage? I love agricola</p>",
      "rawMarkdown": "Hello, sorry for commenting such an old solution, but why is the link of the submission in an online agricola webpage? I love agricola"
    },
    {
      "id": 529926,
      "postDate": "2019-05-11T07:20:29.047Z",
      "rawMarkdown": "",
      "votes": 1,
      "isDeleted": true
    },
    {
      "id": 531972,
      "postDate": "2019-05-16T00:16:26.747Z",
      "content": "<p>Nice! Thanks</p>",
      "rawMarkdown": "Nice! Thanks",
      "votes": 1
    },
    {
      "id": 531967,
      "postDate": "2019-05-16T00:03:29.600Z",
      "content": "<p>Nice! Thanks</p>",
      "rawMarkdown": "Nice! Thanks",
      "votes": 1
    },
    {
      "id": 531523,
      "postDate": "2019-05-15T04:14:10.740Z",
      "content": "<p>Very Good!! Thanks for Sharing!!</p>",
      "rawMarkdown": "Very Good!! Thanks for Sharing!!",
      "votes": 1
    },
    {
      "id": 530422,
      "postDate": "2019-05-12T18:57:43.860Z",
      "content": "<p>Nice. Thanks for sharing this..</p>",
      "rawMarkdown": "Nice. Thanks for sharing this..",
      "votes": 1
    },
    {
      "id": 529063,
      "postDate": "2019-05-09T05:24:59.747Z",
      "content": "<p>Thank you for sharing this.</p>",
      "rawMarkdown": "Thank you for sharing this.",
      "votes": 1
    },
    {
      "id": 528670,
      "postDate": "2019-05-08T10:29:38.307Z",
      "content": "<p>Thank you!I've  learnt a lot from this.</p>",
      "rawMarkdown": "Thank you!I've  learnt a lot from this.",
      "votes": 1
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-19T19:12:58Z",
  "competition_id": 12896,
  "competition_slug": "dont-overfit-ii",
  "team_id": 3060501,
  "solution_url": "/competitions/dont-overfit-ii/writeups/chris-deotte-2nd-place-solution"
}