{
  "id": 14628,
  "title": "share your secret sauce",
  "url": "/competitions/facebook-recruiting-iv-human-or-bot/writeups/small-yellow-duck-share-your-secret-sauce",
  "author_name": "",
  "post_date": "2015-06-09T19:55:54.883Z",
  "votes": 74,
  "comment_count": 38,
  "views": 16418,
  "content": "<p>Here's a little blurb about how I approached feature generation and cross-validation for this problem:</p>\n<p>http://small-yellow-duck.github.io/auction.html</p>\n<p>code: https://github.com/small-yellow-duck/facebook_auction</p>\n<p>I used sklearn's RandomForestClassifier. The most useful features I identified were:</p>\n<ul>\n<li>the median time between a user's bid and that user's previous bid</li>\n<li>the mean number of bids a user made per auction</li>\n<li>the entropy for how many bids a user placed on each day of the week</li>\n<li>the means of the per-auction URL entropy and IP entropy for each user</li>\n<li>the maximum number of bids in a 20 min span</li>\n<li>the total number of bids placed by the user</li>\n<li>the average number of bids a user placed per referring URL</li>\n<li>the number of bids placed by the user on each of the three weekdays in the data</li>\n<li>the minimum and median times between a user's bid and the previous bid by another user in the same auction.</li>\n<li>the fraction of IPs used by a bidder which were also used by another user which was a bot</li>\n</ul>\n<p>Cross-validation was a bit tricky: I did CV 100 times on different 80-20 splits. My mean CV score was almost the same (+/- 0.003) as my final leaderboard score.</p>\n\n<p>edit to answer some further questions:</p>\n<p>In order to convert the time scale to hours, I made a bids/unit time histogram and looked at the periodicity - bidding volumes cycled with a period of one day. There are pretty graphs and more details on my github page.</p>\n<p>A concrete example of the entropy is the IP entropy: N!/(N_{IP1}! N{IP2}!... N{IPn}!). N is the total number of bids and N_{IPn} is the total number of bids placed from the nth IP. (Because the entropy is a large number, I used the log of the entropy.) The entropy is a measure of how both randomly distributed the bids are, how many IPs there are and how many bids there are. A bidder that places all their bids from the same IP has an entropy of N!/N! = 1.</p>\n<p>I used the simple average of five RandomForestClassifiers (each with a different value for the initialization parameter, random_state) to generate the predictions.</p>\n\n<p>Thanks to everyone else who shared their approaches! I thought that leaving out the bots with only one bid was a clever idea. And I was surprised to see that people got mileage out of the device type.</p>",
  "messages": [
    {
      "id": "81297",
      "postDate": "06/09/2015 01:33:54",
      "content": "<p>Here's a little blurb about how I approached feature generation and cross-validation for this problem:</p>\n<p>http://small-yellow-duck.github.io/auction.html</p>\n<p>code: https://github.com/small-yellow-duck/facebook_auction</p>\n<p>I used sklearn's RandomForestClassifier. The most useful features I identified were:</p>\n<ul>\n<li>the median time between a user's bid and that user's previous bid</li>\n<li>the mean number of bids a user made per auction</li>\n<li>the entropy for how many bids a user placed on each day of the week</li>\n<li>the means of the per-auction URL entropy and IP entropy for each user</li>\n<li>the maximum number of bids in a 20 min span</li>\n<li>the total number of bids placed by the user</li>\n<li>the average number of bids a user placed per referring URL</li>\n<li>the number of bids placed by the user on each of the three weekdays in the data</li>\n<li>the minimum and median times between a user's bid and the previous bid by another user in the same auction.</li>\n<li>the fraction of IPs used by a bidder which were also used by another user which was a bot</li>\n</ul>\n<p>Cross-validation was a bit tricky: I did CV 100 times on different 80-20 splits. My mean CV score was almost the same (+/- 0.003) as my final leaderboard score.</p>\n\n<p>edit to answer some further questions:</p>\n<p>In order to convert the time scale to hours, I made a bids/unit time histogram and looked at the periodicity - bidding volumes cycled with a period of one day. There are pretty graphs and more details on my github page.</p>\n<p>A concrete example of the entropy is the IP entropy: N!/(N_{IP1}! N{IP2}!... N{IPn}!). N is the total number of bids and N_{IPn} is the total number of bids placed from the nth IP. (Because the entropy is a large number, I used the log of the entropy.) The entropy is a measure of how both randomly distributed the bids are, how many IPs there are and how many bids there are. A bidder that places all their bids from the same IP has an entropy of N!/N! = 1.</p>\n<p>I used the simple average of five RandomForestClassifiers (each with a different value for the initialization parameter, random_state) to generate the predictions.</p>\n\n<p>Thanks to everyone else who shared their approaches! I thought that leaving out the bots with only one bid was a clever idea. And I was surprised to see that people got mileage out of the device type.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81300",
      "postDate": "06/09/2015 02:03:53",
      "content": "<p>Nice feature engineering... well done. Pushed the random forest and deep learning models as far as possible but could not get above 0.90, as I principally&nbsp;relied on ratios among the various counts per bidder. Thanks for sharing!</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81302",
      "postDate": "06/09/2015 02:08:41",
      "content": "<p>Beat me by 3 minutes :D</p>\n<p>Well,&nbsp;<a href=\"https://bitbucket.org/rinze/kaggle-fr4\">here is my code</a> and&nbsp;<a href=\"http://rinzewind.org/blog-en/2015/my-take-on-kaggles-facebook-recruiting-iv-human-or-robot.html\">here is a brief blog entry</a> I wrote about this competition.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81303",
      "postDate": "06/09/2015 02:13:33",
      "content": "<p>Thanks for sharing, this is great! Quick question: how were you able to parse the time into 20-minute intervals and also days of the week? Was that intuition or did I miss an explanation somewhere?</p>\n\n<p>Thanks again, this is extremely helpful!</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81304",
      "postDate": "06/09/2015 02:15:00",
      "content": "<p>thanks for sharing, and nice job! I had 48 features, thought I had enough features, but turns out you have some features that I don't have which might explain our difference in score.</p>\n\n<p>[quote=small yellow duck;81297]</p>\n<p>Here's a little blurb about how I approached feature generation and cross-validation for this problem:</p>\n<p>http://small-yellow-duck.github.io/auction.html</p>\n<p>I used sklearn's RandomForestClassifier. The most useful features I identified were:</p>\n<p>- the median time between a user's bid and that user's previous bid</p>\n<p>- the mean number of bids a user made per auction</p>\n<p>- the entropy for how many bids a user placed on each day of the week</p>\n<p>- the means of the per-auction URL entropy and IP entropy for each user</p>\n<p>- the maximum number of bids in a 20 min span</p>\n<p>- the total number of bids placed by the user</p>\n<p>- the average number of bids a user placed per referring URL</p>\n<p>- the number of bids placed by the user on each of the three weekdays in the data</p>\n<p>- the minimum and median times between a user's bid and the previous bid by another user in the same auction.</p>\n<p>Cross-validation was a bit tricky: I did CV 100 times on different 80-20 splits. My mean CV score was almost the same (+/- 0.003) as my final leaderboard score.</p>\n<p>[/quote]</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81306",
      "postDate": "06/09/2015 02:23:15",
      "content": "<p>Interesting, and thanks for sharing. I tried several of the same statistics as you, e.g., total bids, mean, sd, median, min interbid time, etc., plus some other far out and crazy ideas.&nbsp;Regarding the model, I tried a bunch of different models too, but random forests seem to work the best for this problem.</p>\n<p>BTW, what is meant by entropy of the number of bids per user, or of URL/IP? Also, how did you know how long 1 day is? Or one week? Or if it's a weekday?</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81309",
      "postDate": "06/09/2015 02:53:54",
      "content": "<p>1) Kitchensink-approach</p>\n<ul>\n<li><span style=\"line-height: 1.4\">Payment account and Adress hash features</span></li>\n<li><span style=\"line-height: 1.4\">Number of bids</span></li>\n<li><span style=\"line-height: 1.4\">Average, max, min bids per auction</span></li>\n<li><span style=\"line-height: 1.4\">Number of uniques in &quot;merchandise&quot;</span></li>\n<li><span style=\"line-height: 1.4\">Most common &quot;merchandise&quot; used</span></li>\n<li><span style=\"line-height: 1.4\">Number of unique phones used</span></li>\n<li><span style=\"line-height: 1.4\">Most common phone used</span></li>\n<li><span style=\"line-height: 1.4\">Number of unique referals</span></li>\n<li><span style=\"line-height: 1.4\">Most common referal used</span></li>\n<li><span style=\"line-height: 1.4\">Number of unique countries used</span></li>\n<li><span style=\"line-height: 1.4\">Most common country used</span></li>\n<li><span style=\"line-height: 1.4\">Number of unique IPs used</span></li>\n<li><span style=\"line-height: 1.4\">Ranking first bid registrered on site (account activity age)</span></li>\n<li><span style=\"line-height: 1.4\">Ranking last bid registrered on site (account activity recency)</span></li>\n<li><span style=\"line-height: 1.4\">Ranking peak bids on site (account activity peak)</span></li>\n<li><span style=\"line-height: 1.4\">The number of bid timestamps ending in &quot;00000&quot; (eg: precisely at 12:00)</span></li>\n<li><span style=\"line-height: 1.4\">The number of times that substracting previous bid timestamp from current bid timestamp results in a round number (eg: precisely 4 seconds)</span></li>\n<li><span style=\"line-height: 1.4\">The number of bids at the same time</span></li>\n<li><span style=\"line-height: 1.4\">The number of bids at the same time normalized to the number of bids for user.</span></li>\n<li><span style=\"line-height: 1.4\">Log( average time between bids )</span></li>\n</ul>\n<p>2) Thinking for the model-model</p>\n<ul>\n<li><span style=\"line-height: 1.4\">Payment account and Adress hash features</span></li>\n<li><span style=\"line-height: 1.4\">Number of bids</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for country (calculated from train)</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for merchandise</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for referal</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for phone</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for ip</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for auction</span></li>\n<li><span style=\"line-height: 1.4\">Year joined</span></li>\n<li><span style=\"line-height: 1.4\">Years active</span></li>\n<li><span style=\"line-height: 1.4\">Last year active</span></li>\n</ul>\n<p>3) Bad IP Model</p>\n<ul>\n<li><span style=\"line-height: 1.4\">IP Blacklist (IPs used only by the bots in train set, for numerous times, and only used once by a test set user)</span></li>\n</ul>\n<p>4) Simple stats</p>\n<ul>\n<li><span style=\"line-height: 1.4\">Payment account and Adress hash features</span></li>\n</ul>\n<p>Min, Max, Average, Unique:</p>\n<ul>\n<li><span style=\"line-height: 1.4\">userid</span></li>\n<li><span style=\"line-height: 1.4\">category</span></li>\n<li><span style=\"line-height: 1.4\">device</span></li>\n<li><span style=\"line-height: 1.4\">auction</span></li>\n<li><span style=\"line-height: 1.4\">country</span></li>\n<li><span style=\"line-height: 1.4\">ref</span></li>\n<li><span style=\"line-height: 1.4\">time</span></li>\n<li><span style=\"line-height: 1.4\">time between bids</span></li>\n</ul>\n<p>5) Final submission</p>\n<p>Weighted rank average of models.</p>\n<p>---</p>\n<p>For modeling 1-4 I mostly used trees and stacked ensembling of feature sets.</p>\n<p>Model 4, though with a modest feature set, did best on LB.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81310",
      "postDate": "06/09/2015 03:01:46",
      "content": "<p>Thanks for sharing your approach so fast!</p>\n<p>Quick question: <strong>how do you average your five RF models, just arithmetric average or average the rank?&nbsp;</strong>I didn't got the chance to try different averaging approach, a ranking average of four single models&nbsp;:one from xgboost,&nbsp;three&nbsp;from sklearn(randomforest, gradient boost, extra tree) boost my score by 0.002, is there better ways to ensemble?</p>\n<p>I was working with entropy all the time in my research, never thought of using it to generate features for this competition...shame on me...</p>\n<p>For me, besides the obvious counting features and their ratios(number of bids, number of auctions, number of ip, number of country...),</p>\n<p>I also calculated the changing frequency of ip, country, auction,&nbsp;the density&nbsp;of bidding time in all auctions and in a single auctions(calculate the mean and std variance)&nbsp;</p>\n<p>For bidding pattern in an auction, I count how often&nbsp;people make continuous bids; the portions of bids in first 10%,30%50%, last 10% 30% 50% of an auction; the maximum number of bids made in an auction(average over all auctions by the bidder and calculate the difference between maximum and mean) ...</p>\n<p>I also split the ip, address and account into two parts and take the first part as feature, but I don't think it help the performance.</p>\n<p>One thing bothers me is that there are 5 instances in the training data marked as bots but only have one bids, so I though their account, address or ip are in some kind of blacklist, so I build a blacklist of account, address and ip, but it doesn't help at all.</p>\n<p>About validation and LB, no matter how I add or reduce features(pca, extra tree importance), even though sometimes my validation score gets higher, my LB score remains the same&nbsp;or get even worse, it's really frustrating, which discouraged me from spending more time to generate new features, guess I didn't find the features that&nbsp;make the public and private LB consistent.&nbsp;</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81316",
      "postDate": "06/09/2015 03:57:33",
      "content": "<p>Thanks for the sharing.. My first time to know using entropy to generate features(instead of var).</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81317",
      "postDate": "06/09/2015 04:33:31",
      "content": "<p><a href=\"https://github.com/rushter/Facebook-Recruiting-IV-Human-or-Robot-/\">My solution.</a></p>\n<p>Scored 0.93939,&nbsp;7th place on private leaderboard</p>\n<p>I just combined 8 similar&nbsp;models to prevent overfitting.</p>\n<p>I used&nbsp;average of&nbsp;XGBoost&nbsp;logistic regression, Vowpal Wabbit , GraphLab&nbsp;boosted trees, sk-l Randomforest, sk-l&nbsp;GradientBoosting, sk-l RandomForest+AdaBoost, sk-l RandomForest +&nbsp;CalibratedClassifier, sk-l RandomForest +&nbsp;BaggingClassifier.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81318",
      "postDate": "06/09/2015 04:33:53",
      "content": "<p><span style=\"line-height: 1.4\">Congrats smallyellowduck, and awesome writeup!</span></p>\n\n<p>I also used the 'everything but the kitchen sink' approach lol.</p>\n<p>7862 total features were used. (Most of these are just useless device counts)</p>\n<p>Simple stats (mean, std, min, max) were computed over the following features:</p>\n<p>* Diversity<br>&nbsp; * # unique counties, devices, ips, (countries, devices), (countries, ips), (devices, ips) per auction</p>\n<p>* Streaks<br>&nbsp; * longest streak of the same device, ip, (device, ip) per auction</p>\n<p>* Peak<br>&nbsp; * for overlapping time windows:<br>&nbsp; * # of bids in a given window<br>&nbsp; * # of auctions in a given window<br>&nbsp; * # unique auctions in the argmax window</p>\n<p>* Count-Vectors<br>&nbsp; * count vectors for each unique device, country, merch</p>\n<p>* First Last<br>&nbsp; * # instances a bidder submitted the first, last bid of an auction</p>\n<p>* Consecutive<br>&nbsp; * # instances that a bidder has 0, 1, 2, ..., 10 bids in between their bids</p>\n<p>* Wavelets<br>&nbsp; * 3-level db4 wavelet decomposition for 3 overlapping windowed histograms of # of bids<br>&nbsp; &nbsp; * |mean|, std of coefficients<br>&nbsp; &nbsp; * differences in |mean|, std of coefficients between windows</p>\n<p>* Time Difference<br>&nbsp; * time since previous bid</p>\n<p>* Position<br>&nbsp; * # of bids in windows relative to auction life</p>\n<p>Model<br>=====<br>Simple average of extra-trees, gradient boosted trees, neural net. For the neural net, I used the top 1000 features as prioritized by the extra-trees classifier.</p>\n<p>Other<br>=====<br>I always try semi-supervised learning... and it never helps my CV or LB score. =[</p>\n<p>Score<br>=====<br>* CV: ~0.92, 0.93, 0.91 (for the respective models)<br>* Public: 0.91503 (138)<br>* Private: 0.93649 (20)</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81319",
      "postDate": "06/09/2015 04:40:30",
      "content": "<p>Congrats to all the winners.! It was great knowing the different approaches. Here goes mine.</p>\n<p><strong>Features :</strong><br>&nbsp; 1. Overall Count and no of changes (on all features)<br>&nbsp; 2. Auction wise count and No of changes (on all features including mean, min and max)<br>&nbsp; 3. Percentile values of time difference between bids in an auction and overall<br>&nbsp; 4. Number of consecutive bids in an auction<br>&nbsp; 5. Time difference between given bidders bid and the previous bid. (mean, min and max) <br>&nbsp; 6. Count and No of changes of two way interactions (ip-country, ip-device and so on)<br>I tried using the payment account and address info but with no success.</p>\n<p><strong>Modeling Algorithm:</strong><br>My final model is an ensemble of<br>&nbsp; 1. Random Forest Classifier - scikit<br>&nbsp; 2. Extra Trees Classifier - scikit<br>&nbsp; 3. Gradient Boosting Classifier - scikit<br>&nbsp; 4. XGBoost</p>\n<p>I tried Neural Nets as well but it fell well short of 0.9 mark and I was not able to tune it further. Would be interested to know if anyone had success with NN in this competition.</p>\n<p>I used repeated 5-fold cross validation for model tuning. Mostly, my CV was in sync with public LB. One thing I noticed was when I tuned the models to get best parameters, it performed a little worse than the model with relatively good parameters (based on local CV). I think this may be due to the fact that some bots may be labelled as non-bots in the training set and so the best models tried to classify them correctly as well thereby causing over-fitting. </p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81320",
      "postDate": "06/09/2015 04:48:19",
      "content": "<p>Congratulations to all the winners.</p>\n<p>My approach is outlined in <a href=\"https://github.com/wallinm1/kaggle-facebook-bot/blob/master/facebook_notebook.ipynb\">this</a>&nbsp;Jupyter notebook.</p>\n<p>I used somewhat of a text classification approach. I concatenated the bid entries into one long space-delimited string, and then performed tfidf-vectorization on these text features. The idea was that bots would exhibit certain sequential patterns in their behavior that could be discovered with this type of a text mining approach.</p>\n<p>In addition to the text features, I also computed some descriptive statistics (median, max, min, range, deciles) for the time differences between bids, along with counts of unique entries for the columns.</p>\n<p>In CV, the numeric features stood for the majority of the auc-gain, but the text-features definitely helped a bit.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81321",
      "postDate": "06/09/2015 05:02:25",
      "content": "<p>Congrats to the winners! This was a pretty fun competition; figuring out whether my CV scores were lying or not was interesting to say the least.</p>\n<p>I used the following features:</p>\n<ol>\n<li>number of bids made at the absolute minimum time delta for each bidder</li>\n<li>number of bids made at one single time stamp (essentially counting how many simultaneous bids were made, either in one auction, or across multiple auctions)</li>\n<li>number of bids per bidder in each quarter of the auction</li>\n<li>number of devices, countries, urls, auctions, ip addresses per bidder&nbsp;</li>\n<li>changes in ip, url, country, device per bidder</li>\n<li>average of the time delta between a bidder beating a previous bidder's bid</li>\n<li>average time delta between the times each bidder places a bid</li>\n<li>Features 1-5 were divided by the total number of bids made by each bidder</li>\n</ol>\n<p>I realized my best scores with XGBoost and 10 fold stratified CV 10 times. My best single model score came as a result of using about half the features listed above. I then used the unused&nbsp;features&nbsp;with the first half to create an ensemble which put me near the top 10% on the public leader board. After which I hit a wall and couldn't really see any ways of improving my score. I am very happy to see that my ensemble moved me closer to the top 5% on the private&nbsp;leader board however!</p>\n<p>I just want to add one interesting note, K&nbsp;nearest neighbours (using 30 neighbours, and a distance based weight per neighbour) worked surprisingly well with only 5 features. Using the&nbsp;log transformed number of bids, devices, countries, auctions and urls per bidder, I was able to get a score of 0.885 on the public leader board (0.90559 on the private). Not bad for about 15 minutes of effort :)</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81331",
      "postDate": "06/09/2015 08:43:56",
      "content": "<p>Well, that was an unexpected surprise this morning. I was just hoping to stay in the top 10%. <br>Congratulations to small yellow duck and the other top scorers.</p>\n<p>My approach seems similar to a number of the ones posted above. I used scikit-learn GradientBoostingClassifier (thanks to the authors!).</p>\n<p>Early on I saw that CV was going to be relatively inaccurate so I ended up choosing 500 resamples of different 2/3 &#8211; 1/3 splits. This took the standard error on my CV AUC calculation down to about 0.0007 so that I could reasonably have an idea of whether each feature I tested was making a positive or negative difference. The inaccuracy on a single CV fold and the helpful post by T. Scharf,&nbsp;<a href=\"https://www.kaggle.com/c/facebook-recruiting-iv-human-or-bot/forums/t/14394/a-basic-look-at-lb-scores\">https://www.kaggle.com/c/facebook-recruiting-iv-human-or-bot/forums/t/14394/a-basic-look-at-lb-scores</a> <br>suggested that public LB scores were not going to be particularly useful so I only made 3 submissions to avoid any temptation to overfit the public LB - I find this a very difficult thing to do&#8230;</p>\n<p><br>Some of my most helpful features were:</p>\n<p>- The proportion of each bidder&#8217;s bids that were in each day ( I believe there were 9 days of bid data).<br>- The proportion of each bidder&#8217;s bids that were in each of 8 3-hour time slots.<br>- The mean time of day for the bids of each bidder.<br>- The total number of bids for each bidder.<br>- The frequency of each final part of the IP address averaged for each bidder &#8211; the first three parts had no positive effect.<br>- The average proportion of bots associated with each device code. NB &#8211; (difficult to put into CV without data leakage &#8211; a slightly different data set for each fold!)<br>- Same as above for each country code.<br>- The total number of bids made in each auction averaged for each bidder. (i.e. did the bidder tend to bid in popular auctions or less popular ones)<br>- The maximum number of auctions a bidder has participated in, in one hour.</p>\n<p>Hopefully, this gives a flavour of what I was trying. Some of the features are quite hard to put into words!</p>\n<p>One final trick that may have made the difference is that I looked at the histogram of the number of bids made by each bot in the training set. There were 5 bots that made just one bid, which looked anomalous to my eye. I wondered if this might not help to predict on a different data set so I submitted an entry which was just my main model but trained on the training set without these five bots. I think this one was the winner, but I&#8217;ll confirm when I can see all my submission private scores.</p>\n<p>I&#8217;ll post in greater detail when I have written my model up. Apologies, as was not expecting to win! </p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81338",
      "postDate": "06/09/2015 12:13:52",
      "content": "<p>Two ideas:</p>\n<p>1- removing the last 5 characters from both address and payment_account</p>\n<p>2- grouping time to 3 categories (First, Middle, Last)</p>\n\n<p>then, i guess this is not good, i trained a Robot Bid detector (instead of a Robot detector).</p>\n<p>and then i used a aggregation function to detect the Robots based on their RobotsBid probabilities; i tried many ones, but MAX is the better one i found (MAX of probability of all RoboticBids that the bidder made; Median or Mean performs poorly).</p>\n\n<p>for this i tried AzureML with some light code of R</p>\n<p>i used CV of a SVM (single parameter)</p>\n\n<p>i didn't have enough time to try more:</p>\n<p>idea 2 was not a good one, i guess</p>\n<p>i liked the ideas of Small Yellow Duck</p>\n\n\n\n<p>thanks for sharing your ideas</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81343",
      "postDate": "06/09/2015 12:29:49",
      "content": "<p>[quote=fakeplastictrees;81331]</p>\n<p>One final trick that may have made the difference is that I looked at the histogram of the number of bids made by each bot in the training set. There were 5 bots that made just one bid, which looked anomalous to my eye. I wondered if this might not help to predict on a different data set so I submitted an entry which was just my main model but trained on the training set without these five bots. I think this one was the winner, but I&#8217;ll confirm when I can see all my submission private scores.</p>\n<p>[/quote]</p>\n<p>Even though my final score&nbsp;is dreadful due to starting the competition really late, I can add to this.<br><br>Removing the 5 bots that made just one bid increased my CV auc by ~0.03, however adding another step at postprocessing increased the public leaderboard score by about 0.02 aswell.</p>\n<p>I searched for the &quot;signatures&quot; of the bids of the five bots that were banned just after one bid in the bid dataset, and it appeared that each one of them had the same signature as a detected bot with a number of bids &gt; 1.<br>The signatures were the auction, referral site, time, device, ip and (obviously) country of the bids. If there were two bids that had equal information, and one bid belonged to a bot bidder, the other bid was also flagged as a bot bidder.<br>So I added a post-processing step which searched for all the matches (test set bid - train set flagged bot bid) after classification, and flagged them as a highly probable bot.</p>\n<p>Unfortunately, since I had only three submissions to use, I couldn't experiment with searching for matches in the test set as well (same signature as a highly probable bot from the test set), and then copying the probabilities to the max of the two.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81352",
      "postDate": "06/09/2015 14:39:26",
      "content": "<p>Fun contest! Congrats to everyone who participated.</p>\n<p>Here's my <a href=\"https://github.com/mikegloudemans/kaggleBotOrNot\">model and description</a>.</p>\n<p>I used sklearn's RandomForestClassifier and LogisticRegression models (an 80-20 mix of the two). Most of my features were the same as what others have mentioned (total # bids, total # auctions, average response time, etc.)&nbsp;One interesting feature that may have helped me out slightly was the mean&nbsp;number of known bots in each auction of participation (not including the bidder we're trying to classify).</p>\n<p>The CV was difficult for me too - I averaged my performance over 500 trials with a random 80-20 split of the training data. This showed around a 0.93 performance on the CV data (closer to what I got on the private leaderboard) but on the public leaderboard the best I could get was 0.915.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81396",
      "postDate": "06/09/2015 19:11:59",
      "content": "<p>Congrats to all the winners!<br>I used scikit learn RandomForestClassifier algorithm.<br>List of decent features according to cross-validation feature selection method I used:<br>1. absolute number of bids per user.<br>2. num uniq devices, auctions, ips and urls<br>3. avg and first-non-zero time diffs between user bids<br>4. percentage of bids made with favorite(most common) device<br>5. percentage of bids made from favorite country<br>6. max number of bids in a single auction<br>7. number of simultaneous bids<br>8. number of device switches, numer of auctions switches, number of ips switches, number of countries switches<br> e.g. this sequence corresponds to 3 'switches' (with 2 devices): [dev1, dev1, dev2, dev2, dev2, dev2, dev1]<br>9. percentage of user bids made in first/last 5% of auction observed timeline <br> (observed timeline doesn't correspond to real auction timeline, but in my opinion still helps to understand if user prefers to bid at the beginning or end of an auction)<br>10. average number of transaction in the same country in 1-hour window with various normalizations<br> (in my opinion this feature roughly reflects user favorite bidding time of the day)<br>11. two categ-&gt;response transformations features. average response for country and device.<br> the same idea as discussed here: https://www.kaggle.com/forums/f/15/kaggle-forum/t/8005/replacing-categorical-variables-with-historic-response-rate</p>\n<p>there were also a few other trivial features</p>\n<p>For cross validation I calculated average AUC for 10 different but fixed 10-fold splits, so totaly it's 10*10 algorithm trains for a single feature check.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81397",
      "postDate": "06/09/2015 19:48:38",
      "content": "<p>[quote=mechatroner;81396]11. two categ-&gt;response transformations features. average response for country and device.<br> the same idea as discussed here: https://www.kaggle.com/forums/f/15/kaggle-forum/t/8005/replacing-categorical-variables-with-historic-response-rate</p>\n<p>[/quote]</p>\n<p>I tried this (also for merchandise) and, while it incremented my local CV score by about 0.1 - 0.2 (only the country historical information), it did not reflect well on the leaderboard. So I think this introduces more leakage / circularity problems than anything else.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81398",
      "postDate": "06/09/2015 20:04:20",
      "content": "<p>Congratulations to the winners, this was a really fun contest!</p>\n<p>For classification I used a two-stage meta-learner approach with <strong>RF</strong>, <strong>XGBoost</strong> and <strong>NN</strong> as base learners and a combination of those three as meta learners.</p>\n<p>The final features I used are as follows:</p>\n<p><strong>1.</strong> Fraction of auctions won by member (out of total number of auctions member participated in).</p>\n<p><strong>2.</strong>&nbsp;Mean fraction of bids made by member (in auctions member participated in).</p>\n<p><strong>3.</strong> Mean fraction of bids made by member within first 10% of bids&nbsp;(in auctions member participated in).</p>\n<p><strong>4.</strong>&nbsp;Mean fraction&nbsp;of bids made by member within last 25% of bids&nbsp;(in auctions member participated in).</p>\n<p><strong>5.</strong>&nbsp;Mean fraction of bids made by member (in auctions member won).</p>\n<p><strong>6.</strong>&nbsp;Mean fraction&nbsp;of bids made by member within first 10% of bids (in auctions member won).</p>\n<p><strong>7.</strong>&nbsp;Mean fraction&nbsp;of bids made by member within last 25% of bids (in auctions member won).</p>\n<p><strong>8. , 9. , 10.</strong> Max, Mean and Standard Deviation of number of auctions member is active in per minute.</p>\n<p><strong>11., 12., 13.</strong>&nbsp;Max, Mean and Standard Deviation of number of auctions member is active in per hour.</p>\n<p><strong>14.,15.,16.</strong> Probability of bot given Country, Merchandise search category, and device</p>\n<p><strong>17., 18., 19.</strong> Max, Mean and Standard Deviation of number of ips used per minute.</p>\n<p><strong>20., 21., 22.</strong>&nbsp;Max, Mean and Standard Deviation of number of ips used per hour.</p>\n<p><strong>23.</strong>&nbsp;Probabilty of being referred by url : 'vasstdc27m7nks3'</p>\n<p><strong>24.</strong> Probability of being a Bot given you belong to a cluster of Payment Accounts (Clustered using Hamming Distance, with a Ward Linkage)</p>\n<p><strong>25.</strong> Probability of being a Bot given you belong to a cluster of Addresses (Clustered using Hamming Distance, with a Ward Linkage)</p>\n<p><strong>26., 27., 28.</strong> &nbsp;Mean, Standard Deviation and&nbsp;Sarle's bimodality coefficient of auction bid value (assuming first bid has a value of 10 cents and each subsequent bid increases it by one cent)</p>\n<p><strong>29., 30.</strong> Mean &nbsp;and Standard Deviation of length&nbsp;of continuous bid streaks by member.</p>\n<p><strong>31., 32.</strong> Mean and Standard Deviation of time between Member's bid streaks and previous bidders' bid.</p>\n<p>I used a Random Forest classifier with Recursive Feature Elimination + Cross Validation to select these features, my 5-fold cross-validation score was similar to the public LB score with -0.003 difference, and it did not change much on the private LB either. :)</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81424",
      "postDate": "06/09/2015 23:29:49",
      "content": "<p>Hi all, congrats to everyone. I've seen people doing incredible work here!</p>\n<p>I was ranked 32nd on private LB (but could have been 17th if I had sent my submission using the most-frequent-URL-of-bidder feature :( ). My work&nbsp;on feature and modeling is actually pretty simple. You can find my blog post which is basically a dump of my IPython notebook (so code + comments) here:&nbsp;http://www.thomas-robert.fr/en/kaggles-human-or-robot-competition-feedback/</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81425",
      "postDate": "06/09/2015 23:36:39",
      "content": "<p>Please find my aftermath blog post here&nbsp;http://podlipensky.com/2015/06/kaggle-competition-aftermath/</p>\n<p>Here is my best feature set:</p>\n<p>['ip_rank', 'auction_rank', 'auction/increments', 'avg_unique_ips',<br> 'ip/increments', 'std_inc_per_auction', 'product/won_auctions',<br> 'payment_type=0875307e1731af94b3b64725ad0deb7d', 'device/increments',<br> 'country_rank', 'avg_inc_per_auction', 'ip/ref', 'avg_ips_per_increment',<br> 'true_bids_count', 'increments/sim_auctions', 'increments/won_auctions',<br> 'country/increments', 'ip_change', 'ip/sim_auctions', 'price_mean',<br> 'sim_auctions', 'frequent_ip=8.116', 'std_ips_per_auction', 'device/ip',<br> 'product/increments', 'device/ref', 'product/ip', 'product/sim_auctions',<br> 'referral_change', 'product/ref', 'ref/auction', 'device/auction',<br> 'avg_referrals_per_auction', 'ref/sim_auctions', 'avg_ips_per_auction',<br> 'median_inc_per_auction', 'ref/increments', 'price_avg', 'auctions_count',<br> 'unique_ips', 'country/ip', 'won_auctions/sim_auctions',<br> 'unique_countries_count', 'robot_price_rmse', 'avg_devices_per_auction',<br> 'std_referrals_per_auction', 'std_devices_per_auction',<br> 'device/sim_auctions', 'ip/auction', 'ref/won_auctions']</p>\n<p>(it is kind of cryptic - please find&nbsp;better description of those in my blog post)</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81442",
      "postDate": "06/10/2015 03:53:28",
      "content": "<p>The code fbHomeBag35.R obtains: 0.90607 0.93256</p>\n<p>The code&nbsp;fbHomeBag16.R obtains: 0.90811 0.93419</p>\n<p>I didn't select either.</p>\n<p>To overfit is only human.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81448",
      "postDate": "06/10/2015 05:52:12",
      "content": "<p>[quote=small yellow duck;81297]</p>\n<p>Here's a little blurb about how I approached feature generation and cross-validation for this problem:</p>\n<p>http://small-yellow-duck.github.io/auction.html</p>\n<p>code: https://github.com/small-yellow-duck/facebook_auction</p>\n<p>[/quote]</p>\n<p>How you decoded time variable is really amazing. What I've done&nbsp;about that variable&nbsp;was assuming it as the count of milliseconds since 1.1.1970 and converting it to a date after ignoring last 4 numbers of the&nbsp;integer value. Thus, I assume time/10000 as the time in milliseconds, which is apparently not correct according to your analysis.</p>\n<p>Such as: 9704553947368421 -&gt; &nbsp;970455394736 -&gt;&nbsp;02 October&nbsp;2000 Monday&nbsp;02:56:34 GMT</p>\n<p>http://www.fileformat.info/tip/java/date2millis.htm</p>\n<p>Congrats..</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81454",
      "postDate": "06/10/2015 07:19:37",
      "content": "<p>I have a long way to go with feature engineering.In this competition.I just&nbsp;pick out 6 properties:AUCTION,DEVICE,TIME,COUNTRY,IP and URL.Then I calculate the&nbsp;pearson correlation coefficient between any two of the 6 properties and 21 features are&nbsp;generated.</p>\n<p>I believe my method is more generalized as the feature engineering nees domain&nbsp;knowledge and the feature-extraction will differ in various cases.However,my method is not able to give an accuracy more than 77%.The truth is that the feature engineering is one of the most powerful tools to seek truth</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81480",
      "postDate": "06/10/2015 14:03:16",
      "content": "<p>[quote=Sushant Tripathy;81398]</p>\n<p><strong>14.,15.,16.</strong> Probability of bot given Country, Merchandise search category, and device</p>\n<p>[/quote]</p>\n\n<p>Congratulations to the winners, and thanks to Kaggle/facebook for hosting/organizing the competition. I had a lot of fun participating it. I just wish I had more time to work on it.</p>\n<p>Sushant Tripathy, Impressive work on feature engineering!</p>\n<p>Hope you don't mind just a clarification on how you calculated feature 14, 15 and 16.</p>\n<p>For example let's consider feature 15.</p>\n<p>In my understanding you may have calculated it as follows: </p>\n<p>(# of merchandise type per class bot)/(size of the fold)</p>\n<p>so for example (just random figures here), if your merchandise 'jewelry' has 100 class 1 (which means bot), and your fold size is 1200 then your feature 15 would be 100/1200= 0.083</p>\n<p>Then you would build a feature that has 0.083 when that bidder has 'jewelry' as merchandise.</p>\n<p>is this explanation correct?</p>\n<p>Have you maybe tried dummifying merchandise? did you see any performance change?</p>\n<p>I tried both and I actually did notice an increase in overfitting. I explained that to myself, considering &quot;cheating&quot; including any information about the output class in your train dataset. Any comments about this?</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81481",
      "postDate": "06/10/2015 14:08:21",
      "content": "<p>[quote=Dario Bernardo;81480]I tried both and I actually did notice an increase in overfitting. I explained that to myself, considering &quot;cheating&quot; including any information about the output class in your train dataset. Any comments about this?</p>\n<p>[/quote]</p>\n<p>Same in my experience. I did not try &quot;dummyfying&quot; the variables, but I noticed the overfitting effect.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81482",
      "postDate": "06/10/2015 14:23:19",
      "content": "<p>[quote=Dario Bernardo;81480]</p>\n<p>Sushant Tripathy, Impressive work on feature engineering!</p>\n<p>Hope you don't mind just a clarification on how you calculated feature 14, 15 and 16.</p>\n<p>For example let's consider feature 15.</p>\n<p>In my understanding you may have calculated it as follows:</p>\n<p>(# of merchandise type per class bot)/(size of the fold)</p>\n<p>so for example (just random figures here), if your merchandise 'jewelry' has 100 class 1 (which means bot), and your fold size is 1200 then your feature 15 would be 100/1200= 0.083</p>\n<p>Then you would build a feature that has 0.083 when that bidder has 'jewelry' as merchandise.</p>\n<p>is this explanation correct?</p>\n<p>Have you maybe tried dummifying merchandise? did you see any performance change?</p>\n<p>I tried both and I actually did notice an increase in overfitting. I explained that to myself, considering &quot;cheating&quot; including any information about the output class in your train dataset. Any comments about this?</p>\n<p>[/quote]</p>\n<p>Hi Dario, thanks for the kind words.&nbsp;My approach for building these features relied on using values for samples with known outcomes.</p>\n<p>For example if merchandise search category&nbsp;was 'jewellery', and my stratified training set (66% partition) contained 5 known Bots and 10 known humans (using the search for 'jewellery') then I would assign a P(Bot|Merch='jewellery') as 5/15 = 0.33.</p>\n<p>In case I don't have any bots or I don't have any humans or there aren't enough labelled members using that search category (thresholded at &gt;= 50), I would assign the overall&nbsp;probability of encountering bots for that run of Stratified CV. So, P(Bot|Merch='jewellery') = 50/1050 = 0.0476&nbsp;(Assuming my training set partition has 50 bots and 1000 humans).</p>\n<p>Now say I am constructing features for member X, who has 12 searches for 'jewellery' and 10 searches for 'sports goods'. Her/his P(Bot|Merch) = (12*P(Bot|Merch='jewellery') + 10*P(Bot|Merch='sports goods'))/(12 + 10)</p>\n<p>Also, I restricted my probabilistic feature construction to only the samples within my training partition,&nbsp;the CV scores on the validation partition were pretty spot on.</p>\n<p>[quote=Dario Bernardo;81480]</p>\n<p>Have you maybe tried dummifying merchandise? did you see any performance change?</p>\n<p>I tried both and I actually did notice an increase in overfitting. I explained that to myself, considering &quot;cheating&quot; including any information about the output class in your train dataset. Any comments about this?</p>\n<p>[/quote]</p>\n<p>Regarding dummification, the assignment of the overall probability is a step in that direction although not a full-blown one. Here, in my opinion, as long as one doesn't use the validation partition to construct the probabilistic features (thus avoiding data leakage/circularity) the CV score would be an accurate representation of out of sample performance. Would love to hear your thoughts about it. :)</p>\n<p>As an after-thought, it&nbsp;was&nbsp;really early morning here when I started writing this comment, I am really sleepy and I probably made some mistakes. :)</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81596",
      "postDate": "06/11/2015 11:30:18",
      "content": "<p>I detailed my feature engineering in&nbsp;<a href=\"http://www.dataiku.com/blog/2015/06/09/kaggle-human-or-robot-part1.html\">this blog post</a>&nbsp;(120 + features, hope this helps). I tested a lot of things after that, mostly blend of GBT and random forests by I ended up overfitting my training data even though my&nbsp;private and public leaderboard score are pretty close.&nbsp;</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81692",
      "postDate": "06/12/2015 13:06:10",
      "content": "<p>Sushant,</p>\n<p>If I correctly understood your procedure, bidders with same &quot;search category&quot; (or merchandise) will end up having the same feature 15 score, so effectively that feature will not help distinguish bidders coming from the same search category, because will have the same score, but eventually will help to distinguish bidders coming from different search categories. Therefore my point was that in my opinion there shouldn't be much difference with a dummification approach of the &quot;merchandise&quot;.</p>\n<p>Please note that I am not trying to say that you did a mistake or that one or the other approach is better. I am just making some general considerations. In order to make such conclusion (assuming that i correctly got your point) I should run lot's of experiments first. After this competition there is so much to revise and re-analyse. I don't want to flood the discussion with further general consideration so I will stop here. I will conclude just thanking you for your kind response and thanking you and the others for posting your solutions. I have learned so much!</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81763",
      "postDate": "06/12/2015 22:51:25",
      "content": "<p>Hi Dario,</p>\n<p>The feature calculation consists of two parts one is to determine what is the probability of bots using the &quot;search category&quot; and then to determine what is the weighted probability of a member being a bot based on the number of bids of that member that originated with certain &quot;search categories&quot;.</p>\n<p>To make it a little clear, I have provided an example below:&nbsp;</p>\n<p>User ID &nbsp; &nbsp; Bot &nbsp; &nbsp;Search Category &nbsp; &nbsp;Bids<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp;s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp;s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Yes &nbsp; &nbsp; s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Yes &nbsp; &nbsp; s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1<br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10<br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8<br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9<br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7<br>u3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;11<br>u3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;12</p>\n<p>Now Step 1:</p>\n<p>Search Category &nbsp; &nbsp; &nbsp;Humans Using It &nbsp; &nbsp; &nbsp;Bots Using It &nbsp; &nbsp; &nbsp; &nbsp; p(Bot Use|Search Category)<br>s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.5<br>s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.5<br>s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.33<br>s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.33</p>\n<p>Now Step 2 (calculation of bid weighted probabiliies):</p>\n<p>User ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Bot &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Search Category &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bids &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p(Bot Use| Search Category ) &nbsp; Bid Weighted Probabilities&nbsp;<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.5&nbsp;</p>\n<p><br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2</p>\n<p><br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.65</p>\n<p><br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.33</p>\n<p><br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 10 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp;</p>\n<p><br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4</p>\n<p><br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.97</p>\n<p><br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.31</p>\n<p><br>u3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 11 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3.63&nbsp;</p>\n<p><br>u3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 12 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3.96</p>\n<p>Now finally to calculate P(Bot|Search Usage) (Bids weighted average of P(Bot usage|Search Categories):</p>\n<p>For u1 = (2.5 + 2 + 1.65 + 0.33)/(5 + 4 + 5 + 1) = 0.432</p>\n<p>For u2 = (5 + 4 + 2.97 + 2.31)/(10 + 8 + 9 + 7) = &nbsp;0.42</p>\n<p>For u3 = (3.63 + 3.96)/(11+12) = 0.33</p>\n<p>Now these values are Feature 15.&nbsp;Hopefully, I could explain the calculations a bit more clearly this time around! :) Some members do have similar values, but never the same, there is always some difference (unless of course two members had the exact same number of bids within the exact same search categories and used the same search categories [rarely happens]). That being said, I did not try any extensive dummification approaches, and have no idea how dummification would have fared. :) &nbsp;I would love to hear about it, when you have had time to compare the approaches.</p>\n<p>Discussions are always welcome on Kaggle forums (in my opinion :D ), and of course I would be happy to discuss feature construction with you further. I have a lot to learn as well. :)&nbsp;</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "81791",
      "postDate": "06/13/2015 07:00:13",
      "content": "<p>Hey guys</p>\n<p>I did a bit of a <a href=\"https://nlml.github.io/kaggle/2015/06/10/fb-recruiting-iv/\">write-up</a>&nbsp;on my approach that got me to first place on the public leaderboard, but 17th on the private leaderboard. Given I'm still fairly new to all this, I'd be interested to hear people's thoughts on how this might have happened. I suppose I just hill-climbed on the public leaderboard a bit...</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "82369",
      "postDate": "06/19/2015 01:34:51",
      "content": "<p>Very useful to see feedback. This was my first competition (I'm a hobbyist), and it was fun even though I am nowhere to be seen in the leader-boards.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "82428",
      "postDate": "06/19/2015 18:12:56",
      "content": "<p>small yellow duck's approach, background, and interesting ideas on Kaggle and ML in medicine can now be found in <a href=\"http://blog.kaggle.com/2015/06/19/facebook-iv-winners-interview-2nd-place-kiri-nicholaka-small-yellow-duck/\" target=\"_blank\">this competition write-up</a>&nbsp;on <a href=\"http://blog.kaggle.com/\" target=\"_blank\">no free hunch</a>.</p>\n<p>Thanks for again for putting together such a great post!</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "107844",
      "postDate": "02/13/2016 02:13:57",
      "content": "<p>[quote=Artem;81317]</p>\n<p><a href=\"https://github.com/rushter/Facebook-Recruiting-IV-Human-or-Robot-/\">My solution.</a></p>\n<p>Scored 0.93939,&nbsp;7th place on private leaderboard</p>\n<p>I just combined 8 similar&nbsp;models to prevent overfitting.</p>\n<p>I used&nbsp;average of&nbsp;XGBoost&nbsp;logistic regression, Vowpal Wabbit , GraphLab&nbsp;boosted trees, sk-l Randomforest, sk-l&nbsp;GradientBoosting, sk-l RandomForest+AdaBoost, sk-l RandomForest +&nbsp;CalibratedClassifier, sk-l RandomForest +&nbsp;BaggingClassifier.</p>\n<p>[/quote]</p>\n<p>Hi,</p>\n<p>Did you posted the approach and solution on any blog? I am beginner and I want to learn. Thanks</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "172305",
      "postDate": "04/03/2017 06:24:17",
      "content": "<p>Link doesn't seem to work.</p>",
      "rawMarkdown": "Link doesn't seem to work.",
      "votes": null
    },
    {
      "id": "501998",
      "postDate": "03/28/2019 03:30:50",
      "content": "<p>Can you share me the link of your code? Your blog looks very impressive. I am a beginner and I want to learn.</p>",
      "rawMarkdown": "Can you share me the link of your code? Your blog looks very impressive. I am a beginner and I want to learn.",
      "votes": null
    },
    {
      "id": "736050",
      "postDate": "02/03/2020 18:48:34",
      "content": "<p>Can you please share the github link of the notebook. Thank you</p>",
      "rawMarkdown": "Can you please share the github link of the notebook. Thank you",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 81300,
      "author_name": "mconway",
      "author_url": "",
      "post_date": "06/09/2015 02:03:53",
      "content": "<p>Nice feature engineering... well done. Pushed the random forest and deep learning models as far as possible but could not get above 0.90, as I principally&nbsp;relied on ratios among the various counts per bidder. Thanks for sharing!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81302,
      "author_name": "rinzewind",
      "author_url": "",
      "post_date": "06/09/2015 02:08:41",
      "content": "<p>Beat me by 3 minutes :D</p>\n<p>Well,&nbsp;<a href=\"https://bitbucket.org/rinze/kaggle-fr4\">here is my code</a> and&nbsp;<a href=\"http://rinzewind.org/blog-en/2015/my-take-on-kaggles-facebook-recruiting-iv-human-or-robot.html\">here is a brief blog entry</a> I wrote about this competition.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81303,
      "author_name": "ivanko",
      "author_url": "",
      "post_date": "06/09/2015 02:13:33",
      "content": "<p>Thanks for sharing, this is great! Quick question: how were you able to parse the time into 20-minute intervals and also days of the week? Was that intuition or did I miss an explanation somewhere?</p>\n\n<p>Thanks again, this is extremely helpful!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81304,
      "author_name": "leoyoung8",
      "author_url": "",
      "post_date": "06/09/2015 02:15:00",
      "content": "<p>thanks for sharing, and nice job! I had 48 features, thought I had enough features, but turns out you have some features that I don't have which might explain our difference in score.</p>\n\n<p>[quote=small yellow duck;81297]</p>\n<p>Here's a little blurb about how I approached feature generation and cross-validation for this problem:</p>\n<p>http://small-yellow-duck.github.io/auction.html</p>\n<p>I used sklearn's RandomForestClassifier. The most useful features I identified were:</p>\n<p>- the median time between a user's bid and that user's previous bid</p>\n<p>- the mean number of bids a user made per auction</p>\n<p>- the entropy for how many bids a user placed on each day of the week</p>\n<p>- the means of the per-auction URL entropy and IP entropy for each user</p>\n<p>- the maximum number of bids in a 20 min span</p>\n<p>- the total number of bids placed by the user</p>\n<p>- the average number of bids a user placed per referring URL</p>\n<p>- the number of bids placed by the user on each of the three weekdays in the data</p>\n<p>- the minimum and median times between a user's bid and the previous bid by another user in the same auction.</p>\n<p>Cross-validation was a bit tricky: I did CV 100 times on different 80-20 splits. My mean CV score was almost the same (+/- 0.003) as my final leaderboard score.</p>\n<p>[/quote]</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81306,
      "author_name": "lchiaying",
      "author_url": "",
      "post_date": "06/09/2015 02:23:15",
      "content": "<p>Interesting, and thanks for sharing. I tried several of the same statistics as you, e.g., total bids, mean, sd, median, min interbid time, etc., plus some other far out and crazy ideas.&nbsp;Regarding the model, I tried a bunch of different models too, but random forests seem to work the best for this problem.</p>\n<p>BTW, what is meant by entropy of the number of bids per user, or of URL/IP? Also, how did you know how long 1 day is? Or one week? Or if it's a weekday?</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81309,
      "author_name": "triskelion",
      "author_url": "",
      "post_date": "06/09/2015 02:53:54",
      "content": "<p>1) Kitchensink-approach</p>\n<ul>\n<li><span style=\"line-height: 1.4\">Payment account and Adress hash features</span></li>\n<li><span style=\"line-height: 1.4\">Number of bids</span></li>\n<li><span style=\"line-height: 1.4\">Average, max, min bids per auction</span></li>\n<li><span style=\"line-height: 1.4\">Number of uniques in &quot;merchandise&quot;</span></li>\n<li><span style=\"line-height: 1.4\">Most common &quot;merchandise&quot; used</span></li>\n<li><span style=\"line-height: 1.4\">Number of unique phones used</span></li>\n<li><span style=\"line-height: 1.4\">Most common phone used</span></li>\n<li><span style=\"line-height: 1.4\">Number of unique referals</span></li>\n<li><span style=\"line-height: 1.4\">Most common referal used</span></li>\n<li><span style=\"line-height: 1.4\">Number of unique countries used</span></li>\n<li><span style=\"line-height: 1.4\">Most common country used</span></li>\n<li><span style=\"line-height: 1.4\">Number of unique IPs used</span></li>\n<li><span style=\"line-height: 1.4\">Ranking first bid registrered on site (account activity age)</span></li>\n<li><span style=\"line-height: 1.4\">Ranking last bid registrered on site (account activity recency)</span></li>\n<li><span style=\"line-height: 1.4\">Ranking peak bids on site (account activity peak)</span></li>\n<li><span style=\"line-height: 1.4\">The number of bid timestamps ending in &quot;00000&quot; (eg: precisely at 12:00)</span></li>\n<li><span style=\"line-height: 1.4\">The number of times that substracting previous bid timestamp from current bid timestamp results in a round number (eg: precisely 4 seconds)</span></li>\n<li><span style=\"line-height: 1.4\">The number of bids at the same time</span></li>\n<li><span style=\"line-height: 1.4\">The number of bids at the same time normalized to the number of bids for user.</span></li>\n<li><span style=\"line-height: 1.4\">Log( average time between bids )</span></li>\n</ul>\n<p>2) Thinking for the model-model</p>\n<ul>\n<li><span style=\"line-height: 1.4\">Payment account and Adress hash features</span></li>\n<li><span style=\"line-height: 1.4\">Number of bids</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for country (calculated from train)</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for merchandise</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for referal</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for phone</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for ip</span></li>\n<li><span style=\"line-height: 1.4\">Fraud score for auction</span></li>\n<li><span style=\"line-height: 1.4\">Year joined</span></li>\n<li><span style=\"line-height: 1.4\">Years active</span></li>\n<li><span style=\"line-height: 1.4\">Last year active</span></li>\n</ul>\n<p>3) Bad IP Model</p>\n<ul>\n<li><span style=\"line-height: 1.4\">IP Blacklist (IPs used only by the bots in train set, for numerous times, and only used once by a test set user)</span></li>\n</ul>\n<p>4) Simple stats</p>\n<ul>\n<li><span style=\"line-height: 1.4\">Payment account and Adress hash features</span></li>\n</ul>\n<p>Min, Max, Average, Unique:</p>\n<ul>\n<li><span style=\"line-height: 1.4\">userid</span></li>\n<li><span style=\"line-height: 1.4\">category</span></li>\n<li><span style=\"line-height: 1.4\">device</span></li>\n<li><span style=\"line-height: 1.4\">auction</span></li>\n<li><span style=\"line-height: 1.4\">country</span></li>\n<li><span style=\"line-height: 1.4\">ref</span></li>\n<li><span style=\"line-height: 1.4\">time</span></li>\n<li><span style=\"line-height: 1.4\">time between bids</span></li>\n</ul>\n<p>5) Final submission</p>\n<p>Weighted rank average of models.</p>\n<p>---</p>\n<p>For modeling 1-4 I mostly used trees and stacked ensembling of feature sets.</p>\n<p>Model 4, though with a modest feature set, did best on LB.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81310,
      "author_name": "skylibrary",
      "author_url": "",
      "post_date": "06/09/2015 03:01:46",
      "content": "<p>Thanks for sharing your approach so fast!</p>\n<p>Quick question: <strong>how do you average your five RF models, just arithmetric average or average the rank?&nbsp;</strong>I didn't got the chance to try different averaging approach, a ranking average of four single models&nbsp;:one from xgboost,&nbsp;three&nbsp;from sklearn(randomforest, gradient boost, extra tree) boost my score by 0.002, is there better ways to ensemble?</p>\n<p>I was working with entropy all the time in my research, never thought of using it to generate features for this competition...shame on me...</p>\n<p>For me, besides the obvious counting features and their ratios(number of bids, number of auctions, number of ip, number of country...),</p>\n<p>I also calculated the changing frequency of ip, country, auction,&nbsp;the density&nbsp;of bidding time in all auctions and in a single auctions(calculate the mean and std variance)&nbsp;</p>\n<p>For bidding pattern in an auction, I count how often&nbsp;people make continuous bids; the portions of bids in first 10%,30%50%, last 10% 30% 50% of an auction; the maximum number of bids made in an auction(average over all auctions by the bidder and calculate the difference between maximum and mean) ...</p>\n<p>I also split the ip, address and account into two parts and take the first part as feature, but I don't think it help the performance.</p>\n<p>One thing bothers me is that there are 5 instances in the training data marked as bots but only have one bids, so I though their account, address or ip are in some kind of blacklist, so I build a blacklist of account, address and ip, but it doesn't help at all.</p>\n<p>About validation and LB, no matter how I add or reduce features(pca, extra tree importance), even though sometimes my validation score gets higher, my LB score remains the same&nbsp;or get even worse, it's really frustrating, which discouraged me from spending more time to generate new features, guess I didn't find the features that&nbsp;make the public and private LB consistent.&nbsp;</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81316,
      "author_name": "lijunjie",
      "author_url": "",
      "post_date": "06/09/2015 03:57:33",
      "content": "<p>Thanks for the sharing.. My first time to know using entropy to generate features(instead of var).</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81317,
      "author_name": "rushter",
      "author_url": "",
      "post_date": "06/09/2015 04:33:31",
      "content": "<p><a href=\"https://github.com/rushter/Facebook-Recruiting-IV-Human-or-Robot-/\">My solution.</a></p>\n<p>Scored 0.93939,&nbsp;7th place on private leaderboard</p>\n<p>I just combined 8 similar&nbsp;models to prevent overfitting.</p>\n<p>I used&nbsp;average of&nbsp;XGBoost&nbsp;logistic regression, Vowpal Wabbit , GraphLab&nbsp;boosted trees, sk-l Randomforest, sk-l&nbsp;GradientBoosting, sk-l RandomForest+AdaBoost, sk-l RandomForest +&nbsp;CalibratedClassifier, sk-l RandomForest +&nbsp;BaggingClassifier.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81318,
      "author_name": "jasontam",
      "author_url": "",
      "post_date": "06/09/2015 04:33:53",
      "content": "<p><span style=\"line-height: 1.4\">Congrats smallyellowduck, and awesome writeup!</span></p>\n\n<p>I also used the 'everything but the kitchen sink' approach lol.</p>\n<p>7862 total features were used. (Most of these are just useless device counts)</p>\n<p>Simple stats (mean, std, min, max) were computed over the following features:</p>\n<p>* Diversity<br>&nbsp; * # unique counties, devices, ips, (countries, devices), (countries, ips), (devices, ips) per auction</p>\n<p>* Streaks<br>&nbsp; * longest streak of the same device, ip, (device, ip) per auction</p>\n<p>* Peak<br>&nbsp; * for overlapping time windows:<br>&nbsp; * # of bids in a given window<br>&nbsp; * # of auctions in a given window<br>&nbsp; * # unique auctions in the argmax window</p>\n<p>* Count-Vectors<br>&nbsp; * count vectors for each unique device, country, merch</p>\n<p>* First Last<br>&nbsp; * # instances a bidder submitted the first, last bid of an auction</p>\n<p>* Consecutive<br>&nbsp; * # instances that a bidder has 0, 1, 2, ..., 10 bids in between their bids</p>\n<p>* Wavelets<br>&nbsp; * 3-level db4 wavelet decomposition for 3 overlapping windowed histograms of # of bids<br>&nbsp; &nbsp; * |mean|, std of coefficients<br>&nbsp; &nbsp; * differences in |mean|, std of coefficients between windows</p>\n<p>* Time Difference<br>&nbsp; * time since previous bid</p>\n<p>* Position<br>&nbsp; * # of bids in windows relative to auction life</p>\n<p>Model<br>=====<br>Simple average of extra-trees, gradient boosted trees, neural net. For the neural net, I used the top 1000 features as prioritized by the extra-trees classifier.</p>\n<p>Other<br>=====<br>I always try semi-supervised learning... and it never helps my CV or LB score. =[</p>\n<p>Score<br>=====<br>* CV: ~0.92, 0.93, 0.91 (for the respective models)<br>* Public: 0.91503 (138)<br>* Private: 0.93649 (20)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81319,
      "author_name": "sudalairajkumar",
      "author_url": "",
      "post_date": "06/09/2015 04:40:30",
      "content": "<p>Congrats to all the winners.! It was great knowing the different approaches. Here goes mine.</p>\n<p><strong>Features :</strong><br>&nbsp; 1. Overall Count and no of changes (on all features)<br>&nbsp; 2. Auction wise count and No of changes (on all features including mean, min and max)<br>&nbsp; 3. Percentile values of time difference between bids in an auction and overall<br>&nbsp; 4. Number of consecutive bids in an auction<br>&nbsp; 5. Time difference between given bidders bid and the previous bid. (mean, min and max) <br>&nbsp; 6. Count and No of changes of two way interactions (ip-country, ip-device and so on)<br>I tried using the payment account and address info but with no success.</p>\n<p><strong>Modeling Algorithm:</strong><br>My final model is an ensemble of<br>&nbsp; 1. Random Forest Classifier - scikit<br>&nbsp; 2. Extra Trees Classifier - scikit<br>&nbsp; 3. Gradient Boosting Classifier - scikit<br>&nbsp; 4. XGBoost</p>\n<p>I tried Neural Nets as well but it fell well short of 0.9 mark and I was not able to tune it further. Would be interested to know if anyone had success with NN in this competition.</p>\n<p>I used repeated 5-fold cross validation for model tuning. Mostly, my CV was in sync with public LB. One thing I noticed was when I tuned the models to get best parameters, it performed a little worse than the model with relatively good parameters (based on local CV). I think this may be due to the fact that some bots may be labelled as non-bots in the training set and so the best models tried to classify them correctly as well thereby causing over-fitting. </p>",
      "votes": null,
      "replies": [
        {
          "id": 736050,
          "author_name": "mojtylor",
          "author_url": "",
          "post_date": "02/03/2020 18:48:34",
          "content": "<p>Can you please share the github link of the notebook. Thank you</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 81320,
      "author_name": "wallinm1",
      "author_url": "",
      "post_date": "06/09/2015 04:48:19",
      "content": "<p>Congratulations to all the winners.</p>\n<p>My approach is outlined in <a href=\"https://github.com/wallinm1/kaggle-facebook-bot/blob/master/facebook_notebook.ipynb\">this</a>&nbsp;Jupyter notebook.</p>\n<p>I used somewhat of a text classification approach. I concatenated the bid entries into one long space-delimited string, and then performed tfidf-vectorization on these text features. The idea was that bots would exhibit certain sequential patterns in their behavior that could be discovered with this type of a text mining approach.</p>\n<p>In addition to the text features, I also computed some descriptive statistics (median, max, min, range, deciles) for the time differences between bids, along with counts of unique entries for the columns.</p>\n<p>In CV, the numeric features stood for the majority of the auc-gain, but the text-features definitely helped a bit.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81321,
      "author_name": "abhishekbarnwal",
      "author_url": "",
      "post_date": "06/09/2015 05:02:25",
      "content": "<p>Congrats to the winners! This was a pretty fun competition; figuring out whether my CV scores were lying or not was interesting to say the least.</p>\n<p>I used the following features:</p>\n<ol>\n<li>number of bids made at the absolute minimum time delta for each bidder</li>\n<li>number of bids made at one single time stamp (essentially counting how many simultaneous bids were made, either in one auction, or across multiple auctions)</li>\n<li>number of bids per bidder in each quarter of the auction</li>\n<li>number of devices, countries, urls, auctions, ip addresses per bidder&nbsp;</li>\n<li>changes in ip, url, country, device per bidder</li>\n<li>average of the time delta between a bidder beating a previous bidder's bid</li>\n<li>average time delta between the times each bidder places a bid</li>\n<li>Features 1-5 were divided by the total number of bids made by each bidder</li>\n</ol>\n<p>I realized my best scores with XGBoost and 10 fold stratified CV 10 times. My best single model score came as a result of using about half the features listed above. I then used the unused&nbsp;features&nbsp;with the first half to create an ensemble which put me near the top 10% on the public leader board. After which I hit a wall and couldn't really see any ways of improving my score. I am very happy to see that my ensemble moved me closer to the top 5% on the private&nbsp;leader board however!</p>\n<p>I just want to add one interesting note, K&nbsp;nearest neighbours (using 30 neighbours, and a distance based weight per neighbour) worked surprisingly well with only 5 features. Using the&nbsp;log transformed number of bids, devices, countries, auctions and urls per bidder, I was able to get a score of 0.885 on the public leader board (0.90559 on the private). Not bad for about 15 minutes of effort :)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81331,
      "author_name": "fakeplastictrees",
      "author_url": "",
      "post_date": "06/09/2015 08:43:56",
      "content": "<p>Well, that was an unexpected surprise this morning. I was just hoping to stay in the top 10%. <br>Congratulations to small yellow duck and the other top scorers.</p>\n<p>My approach seems similar to a number of the ones posted above. I used scikit-learn GradientBoostingClassifier (thanks to the authors!).</p>\n<p>Early on I saw that CV was going to be relatively inaccurate so I ended up choosing 500 resamples of different 2/3 &#8211; 1/3 splits. This took the standard error on my CV AUC calculation down to about 0.0007 so that I could reasonably have an idea of whether each feature I tested was making a positive or negative difference. The inaccuracy on a single CV fold and the helpful post by T. Scharf,&nbsp;<a href=\"https://www.kaggle.com/c/facebook-recruiting-iv-human-or-bot/forums/t/14394/a-basic-look-at-lb-scores\">https://www.kaggle.com/c/facebook-recruiting-iv-human-or-bot/forums/t/14394/a-basic-look-at-lb-scores</a> <br>suggested that public LB scores were not going to be particularly useful so I only made 3 submissions to avoid any temptation to overfit the public LB - I find this a very difficult thing to do&#8230;</p>\n<p><br>Some of my most helpful features were:</p>\n<p>- The proportion of each bidder&#8217;s bids that were in each day ( I believe there were 9 days of bid data).<br>- The proportion of each bidder&#8217;s bids that were in each of 8 3-hour time slots.<br>- The mean time of day for the bids of each bidder.<br>- The total number of bids for each bidder.<br>- The frequency of each final part of the IP address averaged for each bidder &#8211; the first three parts had no positive effect.<br>- The average proportion of bots associated with each device code. NB &#8211; (difficult to put into CV without data leakage &#8211; a slightly different data set for each fold!)<br>- Same as above for each country code.<br>- The total number of bids made in each auction averaged for each bidder. (i.e. did the bidder tend to bid in popular auctions or less popular ones)<br>- The maximum number of auctions a bidder has participated in, in one hour.</p>\n<p>Hopefully, this gives a flavour of what I was trying. Some of the features are quite hard to put into words!</p>\n<p>One final trick that may have made the difference is that I looked at the histogram of the number of bids made by each bot in the training set. There were 5 bots that made just one bid, which looked anomalous to my eye. I wondered if this might not help to predict on a different data set so I submitted an entry which was just my main model but trained on the training set without these five bots. I think this one was the winner, but I&#8217;ll confirm when I can see all my submission private scores.</p>\n<p>I&#8217;ll post in greater detail when I have written my model up. Apologies, as was not expecting to win! </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81338,
      "author_name": "hasbou",
      "author_url": "",
      "post_date": "06/09/2015 12:13:52",
      "content": "<p>Two ideas:</p>\n<p>1- removing the last 5 characters from both address and payment_account</p>\n<p>2- grouping time to 3 categories (First, Middle, Last)</p>\n\n<p>then, i guess this is not good, i trained a Robot Bid detector (instead of a Robot detector).</p>\n<p>and then i used a aggregation function to detect the Robots based on their RobotsBid probabilities; i tried many ones, but MAX is the better one i found (MAX of probability of all RoboticBids that the bidder made; Median or Mean performs poorly).</p>\n\n<p>for this i tried AzureML with some light code of R</p>\n<p>i used CV of a SVM (single parameter)</p>\n\n<p>i didn't have enough time to try more:</p>\n<p>idea 2 was not a good one, i guess</p>\n<p>i liked the ideas of Small Yellow Duck</p>\n\n\n\n<p>thanks for sharing your ideas</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81343,
      "author_name": "mtutek",
      "author_url": "",
      "post_date": "06/09/2015 12:29:49",
      "content": "<p>[quote=fakeplastictrees;81331]</p>\n<p>One final trick that may have made the difference is that I looked at the histogram of the number of bids made by each bot in the training set. There were 5 bots that made just one bid, which looked anomalous to my eye. I wondered if this might not help to predict on a different data set so I submitted an entry which was just my main model but trained on the training set without these five bots. I think this one was the winner, but I&#8217;ll confirm when I can see all my submission private scores.</p>\n<p>[/quote]</p>\n<p>Even though my final score&nbsp;is dreadful due to starting the competition really late, I can add to this.<br><br>Removing the 5 bots that made just one bid increased my CV auc by ~0.03, however adding another step at postprocessing increased the public leaderboard score by about 0.02 aswell.</p>\n<p>I searched for the &quot;signatures&quot; of the bids of the five bots that were banned just after one bid in the bid dataset, and it appeared that each one of them had the same signature as a detected bot with a number of bids &gt; 1.<br>The signatures were the auction, referral site, time, device, ip and (obviously) country of the bids. If there were two bids that had equal information, and one bid belonged to a bot bidder, the other bid was also flagged as a bot bidder.<br>So I added a post-processing step which searched for all the matches (test set bid - train set flagged bot bid) after classification, and flagged them as a highly probable bot.</p>\n<p>Unfortunately, since I had only three submissions to use, I couldn't experiment with searching for matches in the test set as well (same signature as a highly probable bot from the test set), and then copying the probabilities to the max of the two.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81352,
      "author_name": "mikeyg263",
      "author_url": "",
      "post_date": "06/09/2015 14:39:26",
      "content": "<p>Fun contest! Congrats to everyone who participated.</p>\n<p>Here's my <a href=\"https://github.com/mikegloudemans/kaggleBotOrNot\">model and description</a>.</p>\n<p>I used sklearn's RandomForestClassifier and LogisticRegression models (an 80-20 mix of the two). Most of my features were the same as what others have mentioned (total # bids, total # auctions, average response time, etc.)&nbsp;One interesting feature that may have helped me out slightly was the mean&nbsp;number of known bots in each auction of participation (not including the bidder we're trying to classify).</p>\n<p>The CV was difficult for me too - I averaged my performance over 500 trials with a random 80-20 split of the training data. This showed around a 0.93 performance on the CV data (closer to what I got on the private leaderboard) but on the public leaderboard the best I could get was 0.915.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81396,
      "author_name": "mechatroner",
      "author_url": "",
      "post_date": "06/09/2015 19:11:59",
      "content": "<p>Congrats to all the winners!<br>I used scikit learn RandomForestClassifier algorithm.<br>List of decent features according to cross-validation feature selection method I used:<br>1. absolute number of bids per user.<br>2. num uniq devices, auctions, ips and urls<br>3. avg and first-non-zero time diffs between user bids<br>4. percentage of bids made with favorite(most common) device<br>5. percentage of bids made from favorite country<br>6. max number of bids in a single auction<br>7. number of simultaneous bids<br>8. number of device switches, numer of auctions switches, number of ips switches, number of countries switches<br> e.g. this sequence corresponds to 3 'switches' (with 2 devices): [dev1, dev1, dev2, dev2, dev2, dev2, dev1]<br>9. percentage of user bids made in first/last 5% of auction observed timeline <br> (observed timeline doesn't correspond to real auction timeline, but in my opinion still helps to understand if user prefers to bid at the beginning or end of an auction)<br>10. average number of transaction in the same country in 1-hour window with various normalizations<br> (in my opinion this feature roughly reflects user favorite bidding time of the day)<br>11. two categ-&gt;response transformations features. average response for country and device.<br> the same idea as discussed here: https://www.kaggle.com/forums/f/15/kaggle-forum/t/8005/replacing-categorical-variables-with-historic-response-rate</p>\n<p>there were also a few other trivial features</p>\n<p>For cross validation I calculated average AUC for 10 different but fixed 10-fold splits, so totaly it's 10*10 algorithm trains for a single feature check.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81397,
      "author_name": "rinzewind",
      "author_url": "",
      "post_date": "06/09/2015 19:48:38",
      "content": "<p>[quote=mechatroner;81396]11. two categ-&gt;response transformations features. average response for country and device.<br> the same idea as discussed here: https://www.kaggle.com/forums/f/15/kaggle-forum/t/8005/replacing-categorical-variables-with-historic-response-rate</p>\n<p>[/quote]</p>\n<p>I tried this (also for merchandise) and, while it incremented my local CV score by about 0.1 - 0.2 (only the country historical information), it did not reflect well on the leaderboard. So I think this introduces more leakage / circularity problems than anything else.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81398,
      "author_name": "sushanttripathy",
      "author_url": "",
      "post_date": "06/09/2015 20:04:20",
      "content": "<p>Congratulations to the winners, this was a really fun contest!</p>\n<p>For classification I used a two-stage meta-learner approach with <strong>RF</strong>, <strong>XGBoost</strong> and <strong>NN</strong> as base learners and a combination of those three as meta learners.</p>\n<p>The final features I used are as follows:</p>\n<p><strong>1.</strong> Fraction of auctions won by member (out of total number of auctions member participated in).</p>\n<p><strong>2.</strong>&nbsp;Mean fraction of bids made by member (in auctions member participated in).</p>\n<p><strong>3.</strong> Mean fraction of bids made by member within first 10% of bids&nbsp;(in auctions member participated in).</p>\n<p><strong>4.</strong>&nbsp;Mean fraction&nbsp;of bids made by member within last 25% of bids&nbsp;(in auctions member participated in).</p>\n<p><strong>5.</strong>&nbsp;Mean fraction of bids made by member (in auctions member won).</p>\n<p><strong>6.</strong>&nbsp;Mean fraction&nbsp;of bids made by member within first 10% of bids (in auctions member won).</p>\n<p><strong>7.</strong>&nbsp;Mean fraction&nbsp;of bids made by member within last 25% of bids (in auctions member won).</p>\n<p><strong>8. , 9. , 10.</strong> Max, Mean and Standard Deviation of number of auctions member is active in per minute.</p>\n<p><strong>11., 12., 13.</strong>&nbsp;Max, Mean and Standard Deviation of number of auctions member is active in per hour.</p>\n<p><strong>14.,15.,16.</strong> Probability of bot given Country, Merchandise search category, and device</p>\n<p><strong>17., 18., 19.</strong> Max, Mean and Standard Deviation of number of ips used per minute.</p>\n<p><strong>20., 21., 22.</strong>&nbsp;Max, Mean and Standard Deviation of number of ips used per hour.</p>\n<p><strong>23.</strong>&nbsp;Probabilty of being referred by url : 'vasstdc27m7nks3'</p>\n<p><strong>24.</strong> Probability of being a Bot given you belong to a cluster of Payment Accounts (Clustered using Hamming Distance, with a Ward Linkage)</p>\n<p><strong>25.</strong> Probability of being a Bot given you belong to a cluster of Addresses (Clustered using Hamming Distance, with a Ward Linkage)</p>\n<p><strong>26., 27., 28.</strong> &nbsp;Mean, Standard Deviation and&nbsp;Sarle's bimodality coefficient of auction bid value (assuming first bid has a value of 10 cents and each subsequent bid increases it by one cent)</p>\n<p><strong>29., 30.</strong> Mean &nbsp;and Standard Deviation of length&nbsp;of continuous bid streaks by member.</p>\n<p><strong>31., 32.</strong> Mean and Standard Deviation of time between Member's bid streaks and previous bidders' bid.</p>\n<p>I used a Random Forest classifier with Recursive Feature Elimination + Cross Validation to select these features, my 5-fold cross-validation score was similar to the public LB score with -0.003 difference, and it did not change much on the private LB either. :)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81424,
      "author_name": "thomasrobertfr",
      "author_url": "",
      "post_date": "06/09/2015 23:29:49",
      "content": "<p>Hi all, congrats to everyone. I've seen people doing incredible work here!</p>\n<p>I was ranked 32nd on private LB (but could have been 17th if I had sent my submission using the most-frequent-URL-of-bidder feature :( ). My work&nbsp;on feature and modeling is actually pretty simple. You can find my blog post which is basically a dump of my IPython notebook (so code + comments) here:&nbsp;http://www.thomas-robert.fr/en/kaggles-human-or-robot-competition-feedback/</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81425,
      "author_name": "podlipensky",
      "author_url": "",
      "post_date": "06/09/2015 23:36:39",
      "content": "<p>Please find my aftermath blog post here&nbsp;http://podlipensky.com/2015/06/kaggle-competition-aftermath/</p>\n<p>Here is my best feature set:</p>\n<p>['ip_rank', 'auction_rank', 'auction/increments', 'avg_unique_ips',<br> 'ip/increments', 'std_inc_per_auction', 'product/won_auctions',<br> 'payment_type=0875307e1731af94b3b64725ad0deb7d', 'device/increments',<br> 'country_rank', 'avg_inc_per_auction', 'ip/ref', 'avg_ips_per_increment',<br> 'true_bids_count', 'increments/sim_auctions', 'increments/won_auctions',<br> 'country/increments', 'ip_change', 'ip/sim_auctions', 'price_mean',<br> 'sim_auctions', 'frequent_ip=8.116', 'std_ips_per_auction', 'device/ip',<br> 'product/increments', 'device/ref', 'product/ip', 'product/sim_auctions',<br> 'referral_change', 'product/ref', 'ref/auction', 'device/auction',<br> 'avg_referrals_per_auction', 'ref/sim_auctions', 'avg_ips_per_auction',<br> 'median_inc_per_auction', 'ref/increments', 'price_avg', 'auctions_count',<br> 'unique_ips', 'country/ip', 'won_auctions/sim_auctions',<br> 'unique_countries_count', 'robot_price_rmse', 'avg_devices_per_auction',<br> 'std_referrals_per_auction', 'std_devices_per_auction',<br> 'device/sim_auctions', 'ip/auction', 'ref/won_auctions']</p>\n<p>(it is kind of cryptic - please find&nbsp;better description of those in my blog post)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81442,
      "author_name": "mikeskim",
      "author_url": "",
      "post_date": "06/10/2015 03:53:28",
      "content": "<p>The code fbHomeBag35.R obtains: 0.90607 0.93256</p>\n<p>The code&nbsp;fbHomeBag16.R obtains: 0.90811 0.93419</p>\n<p>I didn't select either.</p>\n<p>To overfit is only human.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81448,
      "author_name": "yusufengintetik",
      "author_url": "",
      "post_date": "06/10/2015 05:52:12",
      "content": "<p>[quote=small yellow duck;81297]</p>\n<p>Here's a little blurb about how I approached feature generation and cross-validation for this problem:</p>\n<p>http://small-yellow-duck.github.io/auction.html</p>\n<p>code: https://github.com/small-yellow-duck/facebook_auction</p>\n<p>[/quote]</p>\n<p>How you decoded time variable is really amazing. What I've done&nbsp;about that variable&nbsp;was assuming it as the count of milliseconds since 1.1.1970 and converting it to a date after ignoring last 4 numbers of the&nbsp;integer value. Thus, I assume time/10000 as the time in milliseconds, which is apparently not correct according to your analysis.</p>\n<p>Such as: 9704553947368421 -&gt; &nbsp;970455394736 -&gt;&nbsp;02 October&nbsp;2000 Monday&nbsp;02:56:34 GMT</p>\n<p>http://www.fileformat.info/tip/java/date2millis.htm</p>\n<p>Congrats..</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81454,
      "author_name": "ab19026",
      "author_url": "",
      "post_date": "06/10/2015 07:19:37",
      "content": "<p>I have a long way to go with feature engineering.In this competition.I just&nbsp;pick out 6 properties:AUCTION,DEVICE,TIME,COUNTRY,IP and URL.Then I calculate the&nbsp;pearson correlation coefficient between any two of the 6 properties and 21 features are&nbsp;generated.</p>\n<p>I believe my method is more generalized as the feature engineering nees domain&nbsp;knowledge and the feature-extraction will differ in various cases.However,my method is not able to give an accuracy more than 77%.The truth is that the feature engineering is one of the most powerful tools to seek truth</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81480,
      "author_name": "darioo",
      "author_url": "",
      "post_date": "06/10/2015 14:03:16",
      "content": "<p>[quote=Sushant Tripathy;81398]</p>\n<p><strong>14.,15.,16.</strong> Probability of bot given Country, Merchandise search category, and device</p>\n<p>[/quote]</p>\n\n<p>Congratulations to the winners, and thanks to Kaggle/facebook for hosting/organizing the competition. I had a lot of fun participating it. I just wish I had more time to work on it.</p>\n<p>Sushant Tripathy, Impressive work on feature engineering!</p>\n<p>Hope you don't mind just a clarification on how you calculated feature 14, 15 and 16.</p>\n<p>For example let's consider feature 15.</p>\n<p>In my understanding you may have calculated it as follows: </p>\n<p>(# of merchandise type per class bot)/(size of the fold)</p>\n<p>so for example (just random figures here), if your merchandise 'jewelry' has 100 class 1 (which means bot), and your fold size is 1200 then your feature 15 would be 100/1200= 0.083</p>\n<p>Then you would build a feature that has 0.083 when that bidder has 'jewelry' as merchandise.</p>\n<p>is this explanation correct?</p>\n<p>Have you maybe tried dummifying merchandise? did you see any performance change?</p>\n<p>I tried both and I actually did notice an increase in overfitting. I explained that to myself, considering &quot;cheating&quot; including any information about the output class in your train dataset. Any comments about this?</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81481,
      "author_name": "rinzewind",
      "author_url": "",
      "post_date": "06/10/2015 14:08:21",
      "content": "<p>[quote=Dario Bernardo;81480]I tried both and I actually did notice an increase in overfitting. I explained that to myself, considering &quot;cheating&quot; including any information about the output class in your train dataset. Any comments about this?</p>\n<p>[/quote]</p>\n<p>Same in my experience. I did not try &quot;dummyfying&quot; the variables, but I noticed the overfitting effect.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81482,
      "author_name": "sushanttripathy",
      "author_url": "",
      "post_date": "06/10/2015 14:23:19",
      "content": "<p>[quote=Dario Bernardo;81480]</p>\n<p>Sushant Tripathy, Impressive work on feature engineering!</p>\n<p>Hope you don't mind just a clarification on how you calculated feature 14, 15 and 16.</p>\n<p>For example let's consider feature 15.</p>\n<p>In my understanding you may have calculated it as follows:</p>\n<p>(# of merchandise type per class bot)/(size of the fold)</p>\n<p>so for example (just random figures here), if your merchandise 'jewelry' has 100 class 1 (which means bot), and your fold size is 1200 then your feature 15 would be 100/1200= 0.083</p>\n<p>Then you would build a feature that has 0.083 when that bidder has 'jewelry' as merchandise.</p>\n<p>is this explanation correct?</p>\n<p>Have you maybe tried dummifying merchandise? did you see any performance change?</p>\n<p>I tried both and I actually did notice an increase in overfitting. I explained that to myself, considering &quot;cheating&quot; including any information about the output class in your train dataset. Any comments about this?</p>\n<p>[/quote]</p>\n<p>Hi Dario, thanks for the kind words.&nbsp;My approach for building these features relied on using values for samples with known outcomes.</p>\n<p>For example if merchandise search category&nbsp;was 'jewellery', and my stratified training set (66% partition) contained 5 known Bots and 10 known humans (using the search for 'jewellery') then I would assign a P(Bot|Merch='jewellery') as 5/15 = 0.33.</p>\n<p>In case I don't have any bots or I don't have any humans or there aren't enough labelled members using that search category (thresholded at &gt;= 50), I would assign the overall&nbsp;probability of encountering bots for that run of Stratified CV. So, P(Bot|Merch='jewellery') = 50/1050 = 0.0476&nbsp;(Assuming my training set partition has 50 bots and 1000 humans).</p>\n<p>Now say I am constructing features for member X, who has 12 searches for 'jewellery' and 10 searches for 'sports goods'. Her/his P(Bot|Merch) = (12*P(Bot|Merch='jewellery') + 10*P(Bot|Merch='sports goods'))/(12 + 10)</p>\n<p>Also, I restricted my probabilistic feature construction to only the samples within my training partition,&nbsp;the CV scores on the validation partition were pretty spot on.</p>\n<p>[quote=Dario Bernardo;81480]</p>\n<p>Have you maybe tried dummifying merchandise? did you see any performance change?</p>\n<p>I tried both and I actually did notice an increase in overfitting. I explained that to myself, considering &quot;cheating&quot; including any information about the output class in your train dataset. Any comments about this?</p>\n<p>[/quote]</p>\n<p>Regarding dummification, the assignment of the overall probability is a step in that direction although not a full-blown one. Here, in my opinion, as long as one doesn't use the validation partition to construct the probabilistic features (thus avoiding data leakage/circularity) the CV score would be an accurate representation of out of sample performance. Would love to hear your thoughts about it. :)</p>\n<p>As an after-thought, it&nbsp;was&nbsp;really early morning here when I started writing this comment, I am really sleepy and I probably made some mistakes. :)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81596,
      "author_name": "pierregutierrez",
      "author_url": "",
      "post_date": "06/11/2015 11:30:18",
      "content": "<p>I detailed my feature engineering in&nbsp;<a href=\"http://www.dataiku.com/blog/2015/06/09/kaggle-human-or-robot-part1.html\">this blog post</a>&nbsp;(120 + features, hope this helps). I tested a lot of things after that, mostly blend of GBT and random forests by I ended up overfitting my training data even though my&nbsp;private and public leaderboard score are pretty close.&nbsp;</p>",
      "votes": null,
      "replies": [
        {
          "id": 501998,
          "author_name": "ranjithav",
          "author_url": "",
          "post_date": "03/28/2019 03:30:50",
          "content": "<p>Can you share me the link of your code? Your blog looks very impressive. I am a beginner and I want to learn.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 81692,
      "author_name": "darioo",
      "author_url": "",
      "post_date": "06/12/2015 13:06:10",
      "content": "<p>Sushant,</p>\n<p>If I correctly understood your procedure, bidders with same &quot;search category&quot; (or merchandise) will end up having the same feature 15 score, so effectively that feature will not help distinguish bidders coming from the same search category, because will have the same score, but eventually will help to distinguish bidders coming from different search categories. Therefore my point was that in my opinion there shouldn't be much difference with a dummification approach of the &quot;merchandise&quot;.</p>\n<p>Please note that I am not trying to say that you did a mistake or that one or the other approach is better. I am just making some general considerations. In order to make such conclusion (assuming that i correctly got your point) I should run lot's of experiments first. After this competition there is so much to revise and re-analyse. I don't want to flood the discussion with further general consideration so I will stop here. I will conclude just thanking you for your kind response and thanking you and the others for posting your solutions. I have learned so much!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81763,
      "author_name": "sushanttripathy",
      "author_url": "",
      "post_date": "06/12/2015 22:51:25",
      "content": "<p>Hi Dario,</p>\n<p>The feature calculation consists of two parts one is to determine what is the probability of bots using the &quot;search category&quot; and then to determine what is the weighted probability of a member being a bot based on the number of bids of that member that originated with certain &quot;search categories&quot;.</p>\n<p>To make it a little clear, I have provided an example below:&nbsp;</p>\n<p>User ID &nbsp; &nbsp; Bot &nbsp; &nbsp;Search Category &nbsp; &nbsp;Bids<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp;s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp;s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Yes &nbsp; &nbsp; s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Yes &nbsp; &nbsp; s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1<br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10<br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8<br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9<br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7<br>u3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;11<br>u3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; No &nbsp; &nbsp; s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;12</p>\n<p>Now Step 1:</p>\n<p>Search Category &nbsp; &nbsp; &nbsp;Humans Using It &nbsp; &nbsp; &nbsp;Bots Using It &nbsp; &nbsp; &nbsp; &nbsp; p(Bot Use|Search Category)<br>s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.5<br>s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.5<br>s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.33<br>s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.33</p>\n<p>Now Step 2 (calculation of bid weighted probabiliies):</p>\n<p>User ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Bot &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Search Category &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bids &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p(Bot Use| Search Category ) &nbsp; Bid Weighted Probabilities&nbsp;<br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.5&nbsp;</p>\n<p><br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2</p>\n<p><br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.65</p>\n<p><br>u1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.33</p>\n<p><br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 10 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp;</p>\n<p><br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4</p>\n<p><br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.97</p>\n<p><br>u2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2.31</p>\n<p><br>u3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 11 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3.63&nbsp;</p>\n<p><br>u3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;No &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 12 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.33 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3.96</p>\n<p>Now finally to calculate P(Bot|Search Usage) (Bids weighted average of P(Bot usage|Search Categories):</p>\n<p>For u1 = (2.5 + 2 + 1.65 + 0.33)/(5 + 4 + 5 + 1) = 0.432</p>\n<p>For u2 = (5 + 4 + 2.97 + 2.31)/(10 + 8 + 9 + 7) = &nbsp;0.42</p>\n<p>For u3 = (3.63 + 3.96)/(11+12) = 0.33</p>\n<p>Now these values are Feature 15.&nbsp;Hopefully, I could explain the calculations a bit more clearly this time around! :) Some members do have similar values, but never the same, there is always some difference (unless of course two members had the exact same number of bids within the exact same search categories and used the same search categories [rarely happens]). That being said, I did not try any extensive dummification approaches, and have no idea how dummification would have fared. :) &nbsp;I would love to hear about it, when you have had time to compare the approaches.</p>\n<p>Discussions are always welcome on Kaggle forums (in my opinion :D ), and of course I would be happy to discuss feature construction with you further. I have a lot to learn as well. :)&nbsp;</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 81791,
      "author_name": "liamsch",
      "author_url": "",
      "post_date": "06/13/2015 07:00:13",
      "content": "<p>Hey guys</p>\n<p>I did a bit of a <a href=\"https://nlml.github.io/kaggle/2015/06/10/fb-recruiting-iv/\">write-up</a>&nbsp;on my approach that got me to first place on the public leaderboard, but 17th on the private leaderboard. Given I'm still fairly new to all this, I'd be interested to hear people's thoughts on how this might have happened. I suppose I just hill-climbed on the public leaderboard a bit...</p>",
      "votes": null,
      "replies": [
        {
          "id": 172305,
          "author_name": "mihir11",
          "author_url": "",
          "post_date": "04/03/2017 06:24:17",
          "content": "<p>Link doesn't seem to work.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 82369,
      "author_name": "rawalc",
      "author_url": "",
      "post_date": "06/19/2015 01:34:51",
      "content": "<p>Very useful to see feedback. This was my first competition (I'm a hobbyist), and it was fun even though I am nowhere to be seen in the leader-boards.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 82428,
      "author_name": "annavictoria",
      "author_url": "",
      "post_date": "06/19/2015 18:12:56",
      "content": "<p>small yellow duck's approach, background, and interesting ideas on Kaggle and ML in medicine can now be found in <a href=\"http://blog.kaggle.com/2015/06/19/facebook-iv-winners-interview-2nd-place-kiri-nicholaka-small-yellow-duck/\" target=\"_blank\">this competition write-up</a>&nbsp;on <a href=\"http://blog.kaggle.com/\" target=\"_blank\">no free hunch</a>.</p>\n<p>Thanks for again for putting together such a great post!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 107844,
      "author_name": "",
      "author_url": "",
      "post_date": "02/13/2016 02:13:57",
      "content": "<p>[quote=Artem;81317]</p>\n<p><a href=\"https://github.com/rushter/Facebook-Recruiting-IV-Human-or-Robot-/\">My solution.</a></p>\n<p>Scored 0.93939,&nbsp;7th place on private leaderboard</p>\n<p>I just combined 8 similar&nbsp;models to prevent overfitting.</p>\n<p>I used&nbsp;average of&nbsp;XGBoost&nbsp;logistic regression, Vowpal Wabbit , GraphLab&nbsp;boosted trees, sk-l Randomforest, sk-l&nbsp;GradientBoosting, sk-l RandomForest+AdaBoost, sk-l RandomForest +&nbsp;CalibratedClassifier, sk-l RandomForest +&nbsp;BaggingClassifier.</p>\n<p>[/quote]</p>\n<p>Hi,</p>\n<p>Did you posted the approach and solution on any blog? I am beginner and I want to learn. Thanks</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "81297": "",
    "81300": "",
    "81302": "",
    "81303": "",
    "81304": "",
    "81306": "",
    "81309": "",
    "81310": "",
    "81316": "",
    "81317": "",
    "81318": "",
    "81319": "",
    "81320": "",
    "81321": "",
    "81331": "",
    "81338": "",
    "81343": "",
    "81352": "",
    "81396": "",
    "81397": "",
    "81398": "",
    "81424": "",
    "81425": "",
    "81442": "",
    "81448": "",
    "81454": "",
    "81480": "",
    "81481": "",
    "81482": "",
    "81596": "",
    "81692": "",
    "81763": "",
    "81791": "",
    "82369": "",
    "82428": "",
    "107844": "",
    "172305": "Link doesn't seem to work.",
    "501998": "Can you share me the link of your code? Your blog looks very impressive. I am a beginner and I want to learn.",
    "736050": "Can you please share the github link of the notebook. Thank you"
  },
  "source": "existing_discussion",
  "complete": true,
  "competition_id": 4294,
  "competition_slug": "facebook-recruiting-iv-human-or-bot",
  "team_id": 183920,
  "solution_url": "/competitions/facebook-recruiting-iv-human-or-bot/writeups/small-yellow-duck-share-your-secret-sauce"
}