{
  "id": 127285,
  "title": "8th place solution",
  "content": "<p>congratulations to all winning teams (either winning medels or knowledge and fun). Many thanks to organizers for providing interesting data and execellent platform, also tons of thanks to generous kagglers for their sharing in disscusion and kernels. Waking up and konwing I had my first solo gold as my first medal in kaggle is just.. too good to be true😃 </p>\n\n<h3><strong>Model</strong></h3>\n\n<p>My model is pretty simple. 3 layer mlp with 256-256-256 topology, BN and 0,3 dropout rate, everywhere. 3 leaky relu activation  + 1 linear. That’s it.\nBesides accuracy _group, I use 3 times sqrt of accuracy as another target, hoping it can provide more information than just 0123 values and reduce overfitting, but seem like it don’t have very large effect on the score. </p>\n\n<h3><strong>Validation method</strong></h3>\n\n<p>5 groupkfold, mainly watch inversely weighted oof qwk, but also not weighted oof qwk. inversely weighted is like I described in discussion. I am not very sure if it perfectly mimic test data like truncating, but it runs fast. I had some disalignment among lb and cv. I guess they might just align at ~0.01 level. So I am pretty lucky</p>\n\n<h3><strong>Preprocess</strong></h3>\n\n<p>Log transform and then std transform on numeric features. \nImpute missing with zeros and encode missings of features into 0,1 as new features.  </p>\n\n<h3><strong>Training</strong></h3>\n\n<p>The best score obtaibed by using private data. I gave it a bet since private data could give 2 times amount of data and NN is data hungry. I know its distribution is different, but distribution of trainning data is also different from truncated test anyway. </p>\n\n<p>Submission A uses both private and trainning data (0.559 private lb)\nSubmission B uses trainning data (0.552 private lb)</p>\n\n<p>Training 9 models with all data with different seeds and slightly different epochs (63, 65, 68) </p>\n\n<p>Adam optimizer, 128 batchsize, 0.0003 LR with cyclic decay:\n<code>\ndef lr_decay(index_):\n    if index_ &amp;lt; 15:\n        return 0.0003\n    elif  index_ &amp;lt; 30:\n        if  index_ % 2 ==0:\n            return 0.00008\n        else:\n            return 0.0002 <br>\n    elif  index_ &amp;lt; 40:\n        if  index_ % 2 ==0:\n            return 0.00008\n        else:\n            return 0.00003 <br>\n    else:\n        return 0.00003\n</code></p>\n\n<h3><strong>Postprocess</strong></h3>\n\n<p>Simple average 18 of predictions of 9 models (2 outputs, acc and acc_group per model). then use threshold Optimizer to find thresholds. I randomly initiallized the thresholds for threshold Optimizer around training target distribution, and ran threshold Optimizer 25 times, then chose the one with best cv qwk.</p>\n\n<p>I did a 5 fold simulation(4 folds act as oof we have, 1 fold acts as label of test data) to compare several ways of deciding thresholds. Found that using threshold Optimizer is better than deciding thresholds by simple using training target distributiion.</p>\n\n<h3><strong>Features</strong></h3>\n\n<p>I generated ~1100 features, and selected 216 according null importance by using rf mode in lgbm, introduced by <a href=\"/ogrellier\">@ogrellier</a> in his great notebook <a href=\"https://www.kaggle.com/ogrellier/feature-selection-with-null-importances\">here</a>. I found that use ~100 features gave better cv score(~0.563) than 216 features(0.559), but also low training loss and larger valid-trainning loss gap, which might indicated larger overfit. And 216 feature version have better score on LB. I chose to use 216 features  in both final submissions. </p>\n\n<p>Main feature list:</p>\n\n<ul>\n<li><p>Type, title, event counting,</p></li>\n<li><p>event_id counting, </p></li>\n<li><p>title_acc, title_acc_lasttime</p></li>\n<li><p>title duration max/mean/std (I cliped title duration at 1000, I think 16mins is already quite long for a kid to play a session. Those duration  outlier might be errors in recording. Anyway I don’t think a kid can play a session for 3 hours),\ntitle_misses mean/std, </p></li>\n<li><p>title_round_misses_mean_divided_by_round_duration(reflect acc vs speed infomation),</p></li>\n<li><p>nunique_title, </p></li>\n<li><p>nunique_title_in_this_world(world reflect certain facet of kid’s ability, like knowledge in length, knowledge in speed, etc)</p></li>\n<li><p>session_sum, event_sum, </p></li>\n<li><p>game_tried_ratio(# game with try devided by # game), event_4070_ratio(# 4070 devided by # events)</p></li>\n<li><p>title_distraction_mean.( basically is like what I did in my previous <a href=\"https://www.kaggle.com/zgzjnbzl/visualizing-distraction-and-misclicking\">notebook</a>. I count the all kids’s 4070 events and their coordinates in title_heatmaps. The inverse of counting of 4070 events on heatmaps on a certain position is the distraction-score of this 4070 event.  I assume that misclicks happens in small regions around target object, and  distraction could happen everywhere)</p></li>\n<li><p>Binning assessment_title counting and accuracy max ino 0 and 1(ever played vs never played, ever passed VS never passed).</p></li>\n<li><p>If_skip(binray features indicated if skip into this assessment from title in not designed order )</p></li>\n<li><p>If_repeat(binray features indicated if last session was also this assessment)</p></li>\n</ul>\n\n<h3>**Some other thoughts</h3>\n\n<p>I fixed the memory issues of preprocessing private data at very very last time, and submit it 8 hours before competition deadline and it was running in submission for 6 hours. I made my solution literally 2 hours before the deadline.  yes people are always saying don't give up too early and now I believe it😅</p>\n\n<h3>code:</h3>\n\n<p>resubmitted kernel here: \n<a href=\"https://www.kaggle.com/zgzjnbzl/dsb-mlp-216-feature\">https://www.kaggle.com/zgzjnbzl/dsb-mlp-216-feature</a></p>",
  "comments": [
    {
      "id": 726711,
      "author_name": "Sergei Fironov",
      "author_url": "",
      "post_date": "2020-01-23T07:28:11.607000",
      "content": "<p>Congrats! The report is interesting too.</p>",
      "votes": 2,
      "replies": [
        {
          "id": 726727,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T07:40:08.003000",
          "content": "<p>thanks Sergei. your solution is brilliant! it gonna take me several days to digest the knowledge you share.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 727281,
      "author_name": "Massoud Hosseinali",
      "author_url": "",
      "post_date": "2020-01-23T15:50:24.680000",
      "content": "<p>Congratulations. You have achieved the hardest one (Solo Gold Medal) in the progression system to get. </p>",
      "votes": 1,
      "replies": [
        {
          "id": 727324,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T16:21:23.860000",
          "content": "<p>Thank you so much for your great baseline notebook which gently introduced me into this competition. Still can see many lines of your codes in my final kernel : )) I still have long way to go</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 727028,
      "author_name": "Hanjoon Choe",
      "author_url": "",
      "post_date": "2020-01-23T11:48:12.667000",
      "content": "<p>Congratulations!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 727208,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T14:31:23.540000",
          "content": "<p>Thanks!</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 726999,
      "author_name": "katsu1110",
      "author_url": "",
      "post_date": "2020-01-23T11:11:00.640000",
      "content": "<p>Congratulation! Very nice write-up with lots of things to learn from.\nDid you perform the feature selection using LGBM, not NN? If so, I wonder if your score could be even better by selecting features relevant to NN as LGBM and NN typically have different feature importance.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 727207,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T14:31:13.080000",
          "content": "<p>Thanks! \nyes, I did that using lightGBM. I don't how to do null importance feature selection using NN, since this method needs a clear feature_importance index for features' null importance distribution. Maybe using leave one out(LOFO) feature selection? btw, I feel features that work in gbdt model work in NN as well, not completely uncorrelated if any.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 726891,
      "author_name": "",
      "author_url": "",
      "post_date": "2020-01-23T09:54:05.697000",
      "content": "<p>Great job.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 727197,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T14:21:51.773000",
          "content": "<p>Thanks!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 726881,
      "author_name": "KhanhVD",
      "author_url": "",
      "post_date": "2020-01-23T09:48:23.573000",
      "content": "<p>Congrats and thanks for sharing your solution <a href=\"/zgzjnbzl\">@zgzjnbzl</a> !</p>",
      "votes": 1,
      "replies": [
        {
          "id": 727196,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T14:21:36.030000",
          "content": "<p>Thanks1!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 726817,
      "author_name": "1ira",
      "author_url": "",
      "post_date": "2020-01-23T08:54:02.540000",
      "content": "<p>I wish people were sharing these in detailed notebooks hahahaha. Thank you for the write up anyway and huge congrats.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 727194,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T14:21:10.947000",
          "content": "<p>Thanks! But don't want do it now, since my codes are too messy, and filled with mysterious Chinese-English mixed annotation hahaha, maybe open it when I clean them up.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 726794,
      "author_name": "Iurii Uspangaliev",
      "author_url": "",
      "post_date": "2020-01-23T08:40:21.277000",
      "content": "<p>Well played, congratz!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 727177,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T14:11:14.277000",
          "content": "<p>Thanks!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 726722,
      "author_name": "davidlee0314",
      "author_url": "",
      "post_date": "2020-01-23T07:36:22.670000",
      "content": "<p>Thanks for sharing! I tried threshold with target distribution and got unstable results too. </p>",
      "votes": 1,
      "replies": [
        {
          "id": 726755,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T08:09:36.753000",
          "content": "<p>I am not sure which method is better too. so I did a little simulation, which I think could be done in more rigorous ways. Still don't know qwk at all😂</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 726725,
      "author_name": "Ailurophile",
      "author_url": "",
      "post_date": "2020-01-23T07:38:41.543000",
      "content": "<p>Congratulations\nNice Write-Up\nThanks for Sharing your Approach &amp; Insights!! <a href=\"/zgzjnbzl\">@zgzjnbzl</a> </p>",
      "votes": 0,
      "replies": [
        {
          "id": 726749,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-23T08:05:00.170000",
          "content": "<p>thanks(｡･ω･｡)ﾉ♡</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 735160,
      "author_name": "",
      "author_url": "",
      "post_date": "2020-02-02T17:11:19.133000",
      "content": "<p>Thanks for sharing and Congratulations!. BTW, I have one quesiton. When you create a few new features, if cv boost, you will keep it for sure. But if cv drops, will you drop them before doing null importance or will you keep them and let null importance method do the selection part. </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 735041,
      "author_name": "MeisterMorxrc",
      "author_url": "",
      "post_date": "2020-02-02T12:35:00.087000",
      "content": "<p>Good Job, Congratulations on winning the solo gold medal !</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 728211,
      "author_name": "Buffalo Spdwy",
      "author_url": "",
      "post_date": "2020-01-24T14:01:26.373000",
      "content": "<p>Congratulations and happy new year!🎉 </p>",
      "votes": 0,
      "replies": [
        {
          "id": 728231,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-24T14:16:45.527000",
          "content": "<p>thnks! happy new year💥 </p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 728167,
      "author_name": "Miyabon",
      "author_url": "",
      "post_date": "2020-01-24T13:27:01.530000",
      "content": "<p>Congrats &amp; Thanks for sharing your solution🎉 😄 👍 </p>",
      "votes": 0,
      "replies": [
        {
          "id": 728235,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-24T14:19:23.337000",
          "content": "<p>thank you!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 727399,
      "author_name": "ZZ",
      "author_url": "",
      "post_date": "2020-01-23T17:35:02.403000",
      "content": "<p>Congratulations on the solo gold and the amazing notebook about misclicking!\nFor your ensemble model, how many improvements come from the average of customized acc targets (3*sqrt(acc))?\nDoes acc_group targets have a different distribution with acc targets?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 728234,
          "author_name": "LeiZhou",
          "author_url": "",
          "post_date": "2020-01-24T14:19:07.560000",
          "content": "<p>don't have large difference on cv neither on LB as I can see.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 733270,
      "author_name": "corochann",
      "author_url": "",
      "post_date": "2020-01-30T23:00:40.270000",
      "content": "<p>Congrats and thank you for sharing.</p>",
      "votes": 0,
      "replies": []
    }
  ],
  "comment_count": 29,
  "messages": [
    {
      "id": 726700,
      "postDate": "2020-01-23T07:22:48.133Z",
      "content": "<p>congratulations to all winning teams (either winning medels or knowledge and fun). Many thanks to organizers for providing interesting data and execellent platform, also tons of thanks to generous kagglers for their sharing in disscusion and kernels. Waking up and konwing I had my first solo gold as my first medal in kaggle is just.. too good to be true😃 </p>\n\n<h3><strong>Model</strong></h3>\n\n<p>My model is pretty simple. 3 layer mlp with 256-256-256 topology, BN and 0,3 dropout rate, everywhere. 3 leaky relu activation  + 1 linear. That’s it.\nBesides accuracy _group, I use 3 times sqrt of accuracy as another target, hoping it can provide more information than just 0123 values and reduce overfitting, but seem like it don’t have very large effect on the score. </p>\n\n<h3><strong>Validation method</strong></h3>\n\n<p>5 groupkfold, mainly watch inversely weighted oof qwk, but also not weighted oof qwk. inversely weighted is like I described in discussion. I am not very sure if it perfectly mimic test data like truncating, but it runs fast. I had some disalignment among lb and cv. I guess they might just align at ~0.01 level. So I am pretty lucky</p>\n\n<h3><strong>Preprocess</strong></h3>\n\n<p>Log transform and then std transform on numeric features. \nImpute missing with zeros and encode missings of features into 0,1 as new features.  </p>\n\n<h3><strong>Training</strong></h3>\n\n<p>The best score obtaibed by using private data. I gave it a bet since private data could give 2 times amount of data and NN is data hungry. I know its distribution is different, but distribution of trainning data is also different from truncated test anyway. </p>\n\n<p>Submission A uses both private and trainning data (0.559 private lb)\nSubmission B uses trainning data (0.552 private lb)</p>\n\n<p>Training 9 models with all data with different seeds and slightly different epochs (63, 65, 68) </p>\n\n<p>Adam optimizer, 128 batchsize, 0.0003 LR with cyclic decay:\n<code>\ndef lr_decay(index_):\n    if index_ &amp;lt; 15:\n        return 0.0003\n    elif  index_ &amp;lt; 30:\n        if  index_ % 2 ==0:\n            return 0.00008\n        else:\n            return 0.0002 <br>\n    elif  index_ &amp;lt; 40:\n        if  index_ % 2 ==0:\n            return 0.00008\n        else:\n            return 0.00003 <br>\n    else:\n        return 0.00003\n</code></p>\n\n<h3><strong>Postprocess</strong></h3>\n\n<p>Simple average 18 of predictions of 9 models (2 outputs, acc and acc_group per model). then use threshold Optimizer to find thresholds. I randomly initiallized the thresholds for threshold Optimizer around training target distribution, and ran threshold Optimizer 25 times, then chose the one with best cv qwk.</p>\n\n<p>I did a 5 fold simulation(4 folds act as oof we have, 1 fold acts as label of test data) to compare several ways of deciding thresholds. Found that using threshold Optimizer is better than deciding thresholds by simple using training target distributiion.</p>\n\n<h3><strong>Features</strong></h3>\n\n<p>I generated ~1100 features, and selected 216 according null importance by using rf mode in lgbm, introduced by <a href=\"/ogrellier\">@ogrellier</a> in his great notebook <a href=\"https://www.kaggle.com/ogrellier/feature-selection-with-null-importances\">here</a>. I found that use ~100 features gave better cv score(~0.563) than 216 features(0.559), but also low training loss and larger valid-trainning loss gap, which might indicated larger overfit. And 216 feature version have better score on LB. I chose to use 216 features  in both final submissions. </p>\n\n<p>Main feature list:</p>\n\n<ul>\n<li><p>Type, title, event counting,</p></li>\n<li><p>event_id counting, </p></li>\n<li><p>title_acc, title_acc_lasttime</p></li>\n<li><p>title duration max/mean/std (I cliped title duration at 1000, I think 16mins is already quite long for a kid to play a session. Those duration  outlier might be errors in recording. Anyway I don’t think a kid can play a session for 3 hours),\ntitle_misses mean/std, </p></li>\n<li><p>title_round_misses_mean_divided_by_round_duration(reflect acc vs speed infomation),</p></li>\n<li><p>nunique_title, </p></li>\n<li><p>nunique_title_in_this_world(world reflect certain facet of kid’s ability, like knowledge in length, knowledge in speed, etc)</p></li>\n<li><p>session_sum, event_sum, </p></li>\n<li><p>game_tried_ratio(# game with try devided by # game), event_4070_ratio(# 4070 devided by # events)</p></li>\n<li><p>title_distraction_mean.( basically is like what I did in my previous <a href=\"https://www.kaggle.com/zgzjnbzl/visualizing-distraction-and-misclicking\">notebook</a>. I count the all kids’s 4070 events and their coordinates in title_heatmaps. The inverse of counting of 4070 events on heatmaps on a certain position is the distraction-score of this 4070 event.  I assume that misclicks happens in small regions around target object, and  distraction could happen everywhere)</p></li>\n<li><p>Binning assessment_title counting and accuracy max ino 0 and 1(ever played vs never played, ever passed VS never passed).</p></li>\n<li><p>If_skip(binray features indicated if skip into this assessment from title in not designed order )</p></li>\n<li><p>If_repeat(binray features indicated if last session was also this assessment)</p></li>\n</ul>\n\n<h3>**Some other thoughts</h3>\n\n<p>I fixed the memory issues of preprocessing private data at very very last time, and submit it 8 hours before competition deadline and it was running in submission for 6 hours. I made my solution literally 2 hours before the deadline.  yes people are always saying don't give up too early and now I believe it😅</p>\n\n<h3>code:</h3>\n\n<p>resubmitted kernel here: \n<a href=\"https://www.kaggle.com/zgzjnbzl/dsb-mlp-216-feature\">https://www.kaggle.com/zgzjnbzl/dsb-mlp-216-feature</a></p>",
      "rawMarkdown": "congratulations to all winning teams (either winning medels or knowledge and fun). Many thanks to organizers for providing interesting data and execellent platform, also tons of thanks to generous kagglers for their sharing in disscusion and kernels. Waking up and konwing I had my first solo gold as my first medal in kaggle is just.. too good to be true😃 \n\n### **Model**\n\nMy model is pretty simple. 3 layer mlp with 256-256-256 topology, BN and 0,3 dropout rate, everywhere. 3 leaky relu activation  + 1 linear. That’s it.\nBesides accuracy _group, I use 3 times sqrt of accuracy as another target, hoping it can provide more information than just 0123 values and reduce overfitting, but seem like it don’t have very large effect on the score. \n\n### **Validation method**\n\n5 groupkfold, mainly watch inversely weighted oof qwk, but also not weighted oof qwk. inversely weighted is like I described in discussion. I am not very sure if it perfectly mimic test data like truncating, but it runs fast. I had some disalignment among lb and cv. I guess they might just align at ~0.01 level. So I am pretty lucky\n\n### **Preprocess**\n\nLog transform and then std transform on numeric features. \nImpute missing with zeros and encode missings of features into 0,1 as new features.  \n\n### **Training**\n\nThe best score obtaibed by using private data. I gave it a bet since private data could give 2 times amount of data and NN is data hungry. I know its distribution is different, but distribution of trainning data is also different from truncated test anyway. \n\nSubmission A uses both private and trainning data (0.559 private lb)\nSubmission B uses trainning data (0.552 private lb)\n\nTraining 9 models with all data with different seeds and slightly different epochs (63, 65, 68) \n\nAdam optimizer, 128 batchsize, 0.0003 LR with cyclic decay:\n```\ndef lr_decay(index_):\n    if index_ &lt; 15:\n        return 0.0003\n    elif  index_ &lt; 30:\n        if  index_ % 2 ==0:\n            return 0.00008\n        else:\n            return 0.0002                    \n    elif  index_ &lt; 40:\n        if  index_ % 2 ==0:\n            return 0.00008\n        else:\n            return 0.00003          \n    else:\n        return 0.00003\n```\n\n### **Postprocess**\n\nSimple average 18 of predictions of 9 models (2 outputs, acc and acc_group per model). then use threshold Optimizer to find thresholds. I randomly initiallized the thresholds for threshold Optimizer around training target distribution, and ran threshold Optimizer 25 times, then chose the one with best cv qwk.\n\nI did a 5 fold simulation(4 folds act as oof we have, 1 fold acts as label of test data) to compare several ways of deciding thresholds. Found that using threshold Optimizer is better than deciding thresholds by simple using training target distributiion.\n\n### **Features**\n\nI generated ~1100 features, and selected 216 according null importance by using rf mode in lgbm, introduced by @ogrellier in his great notebook [here](https://www.kaggle.com/ogrellier/feature-selection-with-null-importances). I found that use ~100 features gave better cv score(~0.563) than 216 features(0.559), but also low training loss and larger valid-trainning loss gap, which might indicated larger overfit. And 216 feature version have better score on LB. I chose to use 216 features  in both final submissions. \n\nMain feature list:\n\n- Type, title, event counting,\n\n-  event_id counting, \n\n- title_acc, title_acc_lasttime\n\n-  title duration max/mean/std (I cliped title duration at 1000, I think 16mins is already quite long for a kid to play a session. Those duration  outlier might be errors in recording. Anyway I don’t think a kid can play a session for 3 hours),\ntitle_misses mean/std, \n\n- title_round_misses_mean_divided_by_round_duration(reflect acc vs speed infomation),\n\n- nunique_title, \n\n- nunique_title_in_this_world(world reflect certain facet of kid’s ability, like knowledge in length, knowledge in speed, etc)\n\n- session_sum, event_sum, \n\n- game_tried_ratio(# game with try devided by # game), event_4070_ratio(# 4070 devided by # events)\n\n- title_distraction_mean.( basically is like what I did in my previous [notebook](https://www.kaggle.com/zgzjnbzl/visualizing-distraction-and-misclicking). I count the all kids’s 4070 events and their coordinates in title_heatmaps. The inverse of counting of 4070 events on heatmaps on a certain position is the distraction-score of this 4070 event.  I assume that misclicks happens in small regions around target object, and  distraction could happen everywhere)\n\n- Binning assessment_title counting and accuracy max ino 0 and 1(ever played vs never played, ever passed VS never passed).\n\n- If_skip(binray features indicated if skip into this assessment from title in not designed order )\n\n- If_repeat(binray features indicated if last session was also this assessment)\n\n### **Some other thoughts\n\nI fixed the memory issues of preprocessing private data at very very last time, and submit it 8 hours before competition deadline and it was running in submission for 6 hours. I made my solution literally 2 hours before the deadline.  yes people are always saying don't give up too early and now I believe it😅\n\n### code:\n\nresubmitted kernel here: \n[https://www.kaggle.com/zgzjnbzl/dsb-mlp-216-feature](https://www.kaggle.com/zgzjnbzl/dsb-mlp-216-feature)",
      "votes": 70
    },
    {
      "id": 726711,
      "postDate": "2020-01-23T07:28:11.607Z",
      "content": "<p>Congrats! The report is interesting too.</p>",
      "rawMarkdown": "Congrats! The report is interesting too.",
      "votes": 2,
      "replies": [
        {
          "id": 726727,
          "postDate": "2020-01-23T07:40:08.003Z",
          "content": "<p>thanks Sergei. your solution is brilliant! it gonna take me several days to digest the knowledge you share.</p>",
          "rawMarkdown": "thanks Sergei. your solution is brilliant! it gonna take me several days to digest the knowledge you share.",
          "votes": 1
        }
      ]
    },
    {
      "id": 727281,
      "postDate": "2020-01-23T15:50:24.680Z",
      "content": "<p>Congratulations. You have achieved the hardest one (Solo Gold Medal) in the progression system to get. </p>",
      "rawMarkdown": "Congratulations. You have achieved the hardest one (Solo Gold Medal) in the progression system to get. ",
      "votes": 1,
      "replies": [
        {
          "id": 727324,
          "postDate": "2020-01-23T16:21:23.860Z",
          "content": "<p>Thank you so much for your great baseline notebook which gently introduced me into this competition. Still can see many lines of your codes in my final kernel : )) I still have long way to go</p>",
          "rawMarkdown": "Thank you so much for your great baseline notebook which gently introduced me into this competition. Still can see many lines of your codes in my final kernel : )) I still have long way to go",
          "votes": 1
        }
      ]
    },
    {
      "id": 727028,
      "postDate": "2020-01-23T11:48:12.667Z",
      "content": "<p>Congratulations!</p>",
      "rawMarkdown": "Congratulations!",
      "votes": 1,
      "replies": [
        {
          "id": 727208,
          "postDate": "2020-01-23T14:31:23.540Z",
          "content": "<p>Thanks!</p>",
          "rawMarkdown": "Thanks!",
          "votes": 1
        }
      ]
    },
    {
      "id": 726999,
      "postDate": "2020-01-23T11:11:00.640Z",
      "content": "<p>Congratulation! Very nice write-up with lots of things to learn from.\nDid you perform the feature selection using LGBM, not NN? If so, I wonder if your score could be even better by selecting features relevant to NN as LGBM and NN typically have different feature importance.</p>",
      "rawMarkdown": "Congratulation! Very nice write-up with lots of things to learn from.\nDid you perform the feature selection using LGBM, not NN? If so, I wonder if your score could be even better by selecting features relevant to NN as LGBM and NN typically have different feature importance.",
      "votes": 1,
      "replies": [
        {
          "id": 727207,
          "postDate": "2020-01-23T14:31:13.080Z",
          "content": "<p>Thanks! \nyes, I did that using lightGBM. I don't how to do null importance feature selection using NN, since this method needs a clear feature_importance index for features' null importance distribution. Maybe using leave one out(LOFO) feature selection? btw, I feel features that work in gbdt model work in NN as well, not completely uncorrelated if any.</p>",
          "rawMarkdown": "Thanks! \nyes, I did that using lightGBM. I don't how to do null importance feature selection using NN, since this method needs a clear feature_importance index for features' null importance distribution. Maybe using leave one out(LOFO) feature selection? btw, I feel features that work in gbdt model work in NN as well, not completely uncorrelated if any.",
          "votes": 1
        }
      ]
    },
    {
      "id": 726891,
      "postDate": "2020-01-23T09:54:05.697Z",
      "content": "<p>Great job.</p>",
      "rawMarkdown": "Great job.",
      "votes": 1,
      "replies": [
        {
          "id": 727197,
          "postDate": "2020-01-23T14:21:51.773Z",
          "content": "<p>Thanks!</p>",
          "rawMarkdown": "Thanks!"
        }
      ]
    },
    {
      "id": 726881,
      "postDate": "2020-01-23T09:48:23.573Z",
      "content": "<p>Congrats and thanks for sharing your solution <a href=\"/zgzjnbzl\">@zgzjnbzl</a> !</p>",
      "rawMarkdown": "Congrats and thanks for sharing your solution @zgzjnbzl !",
      "votes": 1,
      "replies": [
        {
          "id": 727196,
          "postDate": "2020-01-23T14:21:36.030Z",
          "content": "<p>Thanks1!</p>",
          "rawMarkdown": "Thanks1!"
        }
      ]
    },
    {
      "id": 726817,
      "postDate": "2020-01-23T08:54:02.540Z",
      "content": "<p>I wish people were sharing these in detailed notebooks hahahaha. Thank you for the write up anyway and huge congrats.</p>",
      "rawMarkdown": "I wish people were sharing these in detailed notebooks hahahaha. Thank you for the write up anyway and huge congrats.",
      "votes": 1,
      "replies": [
        {
          "id": 727194,
          "postDate": "2020-01-23T14:21:10.947Z",
          "content": "<p>Thanks! But don't want do it now, since my codes are too messy, and filled with mysterious Chinese-English mixed annotation hahaha, maybe open it when I clean them up.</p>",
          "rawMarkdown": "Thanks! But don't want do it now, since my codes are too messy, and filled with mysterious Chinese-English mixed annotation hahaha, maybe open it when I clean them up."
        }
      ]
    },
    {
      "id": 726794,
      "postDate": "2020-01-23T08:40:21.277Z",
      "content": "<p>Well played, congratz!</p>",
      "rawMarkdown": "Well played, congratz!",
      "votes": 1,
      "replies": [
        {
          "id": 727177,
          "postDate": "2020-01-23T14:11:14.277Z",
          "content": "<p>Thanks!</p>",
          "rawMarkdown": "Thanks!"
        }
      ]
    },
    {
      "id": 726722,
      "postDate": "2020-01-23T07:36:22.670Z",
      "content": "<p>Thanks for sharing! I tried threshold with target distribution and got unstable results too. </p>",
      "rawMarkdown": "Thanks for sharing! I tried threshold with target distribution and got unstable results too. ",
      "votes": 1,
      "replies": [
        {
          "id": 726755,
          "postDate": "2020-01-23T08:09:36.753Z",
          "content": "<p>I am not sure which method is better too. so I did a little simulation, which I think could be done in more rigorous ways. Still don't know qwk at all😂</p>",
          "rawMarkdown": "I am not sure which method is better too. so I did a little simulation, which I think could be done in more rigorous ways. Still don't know qwk at all😂"
        }
      ]
    },
    {
      "id": 726725,
      "postDate": "2020-01-23T07:38:41.543Z",
      "content": "<p>Congratulations\nNice Write-Up\nThanks for Sharing your Approach &amp; Insights!! <a href=\"/zgzjnbzl\">@zgzjnbzl</a> </p>",
      "rawMarkdown": "Congratulations\nNice Write-Up\nThanks for Sharing your Approach &amp; Insights!! @zgzjnbzl ",
      "replies": [
        {
          "id": 726749,
          "postDate": "2020-01-23T08:05:00.170Z",
          "content": "<p>thanks(｡･ω･｡)ﾉ♡</p>",
          "rawMarkdown": "thanks(｡･ω･｡)ﾉ♡"
        }
      ]
    },
    {
      "id": 735160,
      "postDate": "2020-02-02T17:11:19.133Z",
      "content": "<p>Thanks for sharing and Congratulations!. BTW, I have one quesiton. When you create a few new features, if cv boost, you will keep it for sure. But if cv drops, will you drop them before doing null importance or will you keep them and let null importance method do the selection part. </p>",
      "rawMarkdown": "Thanks for sharing and Congratulations!. BTW, I have one quesiton. When you create a few new features, if cv boost, you will keep it for sure. But if cv drops, will you drop them before doing null importance or will you keep them and let null importance method do the selection part. "
    },
    {
      "id": 735041,
      "postDate": "2020-02-02T12:35:00.087Z",
      "content": "<p>Good Job, Congratulations on winning the solo gold medal !</p>",
      "rawMarkdown": "Good Job, Congratulations on winning the solo gold medal !"
    },
    {
      "id": 728211,
      "postDate": "2020-01-24T14:01:26.373Z",
      "content": "<p>Congratulations and happy new year!🎉 </p>",
      "rawMarkdown": "Congratulations and happy new year!🎉 ",
      "replies": [
        {
          "id": 728231,
          "postDate": "2020-01-24T14:16:45.527Z",
          "content": "<p>thnks! happy new year💥 </p>",
          "rawMarkdown": "thnks! happy new year💥 ",
          "votes": 1
        }
      ]
    },
    {
      "id": 728167,
      "postDate": "2020-01-24T13:27:01.530Z",
      "content": "<p>Congrats &amp; Thanks for sharing your solution🎉 😄 👍 </p>",
      "rawMarkdown": "Congrats &amp; Thanks for sharing your solution🎉 😄 👍 ",
      "replies": [
        {
          "id": 728235,
          "postDate": "2020-01-24T14:19:23.337Z",
          "content": "<p>thank you!</p>",
          "rawMarkdown": "thank you!"
        }
      ]
    },
    {
      "id": 727399,
      "postDate": "2020-01-23T17:35:02.403Z",
      "content": "<p>Congratulations on the solo gold and the amazing notebook about misclicking!\nFor your ensemble model, how many improvements come from the average of customized acc targets (3*sqrt(acc))?\nDoes acc_group targets have a different distribution with acc targets?</p>",
      "rawMarkdown": "Congratulations on the solo gold and the amazing notebook about misclicking!\nFor your ensemble model, how many improvements come from the average of customized acc targets (3*sqrt(acc))?\nDoes acc_group targets have a different distribution with acc targets?",
      "replies": [
        {
          "id": 728234,
          "postDate": "2020-01-24T14:19:07.560Z",
          "content": "<p>don't have large difference on cv neither on LB as I can see.</p>",
          "rawMarkdown": "don't have large difference on cv neither on LB as I can see.",
          "votes": 1
        }
      ]
    },
    {
      "id": 733270,
      "postDate": "2020-01-30T23:00:40.270Z",
      "content": "<p>Congrats and thank you for sharing.</p>",
      "rawMarkdown": "Congrats and thank you for sharing."
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-23T23:48:31Z",
  "competition_id": 16531,
  "competition_slug": "data-science-bowl-2019",
  "team_id": 3866368,
  "solution_url": "/competitions/data-science-bowl-2019/writeups/leizhou-8th-place-solution"
}