{
  "fetched_at": "2026-10-19T17:11:55Z",
  "source_url": "https://www.kaggle.com/competitions/booknew/data",
  "pages": [
    {
      "name": "rules",
      "content": "You can upload two sets of predictions each day. Don't cheat. Individual members of the team are not allowed to upload separate entries, i.e., two entries per team per day.",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "data-description",
      "content": "<P>There are two tables. The target.csv file has one record for every\ncustomer in the training and test sets. The id variable uniquely \nidentifies a customer and logtarg is the dependent variable. It is \nset to NA for the test cases. There should be 19,259 records plus a \nheader line giving the variale names.\n<P>The orders.csv file has one record for every item ordered by a \ncustomer in the test or training set prior to the contact point. \nThere are 775012 records plus a header line. The variables are as \nfollows:\n<ul>\n<LI>id: customer id matching the one in target.csv\n<LI>ordnum: uniquely identifies an order\n<LI>t: time in days since the order (1 is would be yesterday and 365 \nwould be one year ago).\n<LI>category: category identifier for the item:\n1=fiction; 3=classics; 5=cartoons; 6=legends; 7=philosophy;\n8=religion; 9=psychology; 10=linguistics; 12=art; 14=music;\n17=art reprints;\n19=history; 20=contemporary history; 21=economy; 22=politics; 23=science;\n26=computer science; 27=traffic, railroads; 30=maps; 31=travel guides;\n35=health; 36=cooking; 37=learning; 38=games and riddles; 39=sports;\n40=hobby; 41=nature/animals/plants; 44=encyclopedia; 50=videos, DVDs;\n99=non books\n<LI>qty: Number of items ordered\n<LI>price: price per item (a person who orders qty=2 copies of a book \nfor 10 Euros would have a total amount of 2*10=20 Euros)\n<LI>brandid: the company has three separate brands selling different \nkinds of books. This offer is from brand 1.\n</UL>\n\n<P> Here is example code to get your started. Upload testanswer.csv.\n<pre>\nlibrary(tidyverse)\nsetwd(\"/Users/ecm/teach/data/booknew\")\norders = read.csv(\"orders.csv\")\ntarget = read.csv(\"target.csv\")\n\nrfm = orders %>%\n  group_by(id) %>%\n  summarise(tof=max(t), r = min(t), fitem=n(), ford=n_distinct(ordnum), m=sum(price*qty))\nhead(rfm)\nsummary(rfm)\n\nall = target %>%\n  left_join(rfm, by=\"id\")\ntrain=!is.na(all$logtarg)\nfit = lm(logtarg ~ r + fitem + m, data=all, subset=train)\nyhat = predict(fit, all[!train,])\nans = data.frame(id=all$id[!train], logtarg=yhat)\nwrite.csv(ans, \"testanswer.csv\", row.names=F)\n</pre>\n",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Description",
      "content": "A German book retailer sent out offers to customers. You job is to build predictor variables and a machine learning model to predict how much each customer who received the contact point will spend. The outcome variable is logtarg. The test set is indicated by is.na(logtarg). The objective is to predict logtarg with minimum RMSE on the test set.",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Evaluation",
      "content": "<p>The evaluation pages describes how submissions will be scored and how students should format their submissions. You don't need a sub-title at the top (the page title appears above). For an example of a high quality evaluation page, see the 2013 KDD Cup page, which we have copied here:</p>\r\n<hr />\r\n<p>The evaluation metric for this competition is <a href=\"https://www.kaggle.com/wiki/MeanFScore\"> Mean F1-Score</a>. The F1 score, commonly used in information retrieval, measures accuracy using the statistics precision p and recall r. Precision is the ratio of true positives (tp) to all predicted positives (tp + fp). Recall is the ratio of true positives to all actual positives (tp + fn). The F1 score is given by:</p>\r\n<p>\\[ F1 = 2\\frac{p \\cdot r}{p+r}\\ \\ \\mathrm{where}\\ \\ p = \\frac{tp}{tp+fp},\\ \\ r = \\frac{tp}{tp+fn} \\]</p>\r\n<p>The F1 metric weights recall and precision equally, and a good retrieval algorithm will maximize both precision and recall simultaneously. Thus, moderately good performance on both will be favored over extremely good performance on one and poor performance on the other.</p>\r\n<h2>Submission Format</h2>\r\n<p><strong>For every author in the dataset</strong>, submission files should contain two columns: AuthorId and DuplicateAuthorIds. DuplicateAuthorIds should be a space-delimited list. Every AuthorId counts as his/her own duplicate, and every duplicate should be listed under each of its respective ids. For example, if you suspect author A, B, and C are the same, you should list (A,A B C), (B,B A C), (C,C A B).</p>\r\n<p>The file should contain a header and have the following format:</p>\r\n<pre>AuthorId,DuplicateAuthorIds<br />1,1<br /><span style=\"font-size: 14px; line-height: 1.4em;\">8,8<br />9,9 10<br /></span><span style=\"font-size: 14px; line-height: 1.4em;\">10,10 9<br /></span><span style=\"font-size: 14px; line-height: 1.4em;\">etc.</span></pre>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Timeline",
      "content": "You may submit up to two entries a day until 11:59pm on June 8. The winner will be the team with the lowest MSE on the private leader board test set.",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    }
  ]
}