{"cells":[{"metadata":{"trusted":true,"_uuid":"e109dc3746d5010f91bf0ccd4bfffdd024b7f5b2"},"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n%matplotlib inline\n\npd.options.mode.chained_assignment = None\npd.options.display.max_columns = 999\nplt.rcParams['figure.figsize'] = (30, 15)\nplt.rcParams['font.size'] = 25","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"dabc7708d2dcbca8499842fd8ff21b5fddf9c96c"},"cell_type":"code","source":"!ls ../input","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4d4419c7fdb25fff577e399e559c7051ea8c9a01"},"cell_type":"code","source":"path = [\"../input/train.csv\", \"../input/test.csv\"]\ndata = pd.concat(pd.read_csv(p, parse_dates=[\"activation_date\"]) for p in path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"af81cfbf99efc6ee7fa740941ea1b8668c21b23a"},"cell_type":"code","source":"data.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7e90e1f3de612360b0498903feb35b8ccacfd3ab"},"cell_type":"code","source":"data.dtypes","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e6fbba7023a255c8080a500e0a782d2482058fcf"},"cell_type":"code","source":"control = pd.concat((data[c].value_counts() for c in [\"param_1\", \"param_2\", \"param_3\"]), axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"374da61f86d1fc7d02a901d2710bcfd6b5364a41"},"cell_type":"code","source":"control.sort_values(\"param_1\", ascending=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"afcbe9f201a88196b09b1c887698a650752f5484"},"cell_type":"code","source":"data.isnull().sum()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"58d2778da1b7fd1da80bde4a8178d833a9297a72"},"cell_type":"code","source":"data.price.fillna(data.price.mean(), inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4d44df57e89e457001ec41e81fa948e6fc9a0251"},"cell_type":"code","source":"data.dtypes","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ef4255914fbc49611447bab0db2fbf074ecc5b4c"},"cell_type":"code","source":"pd.concat([data.dtypes, data.apply(lambda x: x.unique().shape[0])], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aba2d57cbae0adfc48deb01d2a345777bef97cb1"},"cell_type":"code","source":"data.drop([\"image\", \"title\", \"description\"], axis=1, inplace=True)\ndata.set_index(\"item_id\", inplace=True)\npd.concat([data.dtypes, data.apply(lambda x: x.unique().shape[0])], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c18bbc14a9c05337d5bd5aac7850f4bf2c34e92c"},"cell_type":"code","source":"control.isnull().sum(axis=1).value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bac8770f69cc758adc6e5bd7e9484a8ba5d94df7"},"cell_type":"code","source":"cat_cols = data.select_dtypes(\"object\").columns.tolist() + [\"image_top_1\"]\nfor c in cat_cols:\n    data[c].fillna(\"NA\", inplace=True)\n    data[c] = pd.factorize(data[c])[0]\ncat_cols","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"338c0ecceb3db1070f4477c316f336cb2caaa357"},"cell_type":"code","source":"data.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"430a9f24f86460924768c372c1ef40f4943769ea"},"cell_type":"code","source":"data.dtypes","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5587c5be7c7e4f73878dca430b5d505cee2cd493"},"cell_type":"code","source":"data.isnull().sum()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1797684e18c4f47e6e4431bcc808ce2e947fe1a8"},"cell_type":"code","source":"from keras.layers import Input, Dense, Embedding, concatenate, Flatten, PReLU, Dropout, BatchNormalization\nfrom keras.models import Model\nfrom keras import optimizers","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d5e5a68d958b01b1a3134221a1bd8e9700053539"},"cell_type":"code","source":"Model?","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"dca1e9d34e4599311eba83522d5e8237727c3394"},"cell_type":"code","source":"inputs = []\nembeddings = []\nfor c in cat_cols:\n    size = data[c].unique().shape[0]\n    inp = Input((1,), name=c)\n    inputs.append(inp)\n    emb = Flatten()(Embedding(size, output_dim=min(max(int(size ** 0.25), 1), 4))(inp))\n    embeddings.append(emb)\nnumeric = Input((2,), name=\"numeric\")\ninputs.append(numeric)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bcc8e5954866ac6e1ecbd7e453edb60b65b58947"},"cell_type":"code","source":"final = concatenate(embeddings + [numeric])\n# final = Dense(256, activation=\"relu\")(final)\n# final = Dense(128, activation=\"relu\")(final)\nfinal = Dense(64, activation=\"relu\")(final)\nfinal = Dense(32, activation=\"relu\")(final)\nfinal = Dense(1)(final)\nmodel = Model(inputs=inputs, outputs=final)\nmodel.compile(optimizer=\"rmsprop\", loss='mean_squared_error')\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cc3243b961cc1d82318e1dfc6c4cb217fe0a2b6b"},"cell_type":"code","source":"cat_cols = [c for c in cat_cols if c != \"user_id\"]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d8f84edbe65fec04a4a01d72eed41fe8eb1fa42b"},"cell_type":"code","source":"cat_cols","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3b47829feadf025688a17ba2a056b2378467ca8f"},"cell_type":"code","source":"inputs = []\nembeddings = []\nfor c in cat_cols:\n    size = data[c].unique().shape[0]\n    inp = Input((1,), name=c)\n    inputs.append(inp)\n    emb = Flatten()(Embedding(size, output_dim=min(max(int(size ** 0.25), 1), 4))(inp))\n    embeddings.append(emb)\nnumeric = Input((2,), name=\"numeric\")\ninputs.append(numeric)\nfinal = concatenate(embeddings + [numeric])\n# final = Dense(256, activation=\"relu\")(final)\n# final = Dense(128, activation=\"relu\")(final)\nfinal = Dense(64, activation=\"relu\")(final)\nfinal = Dense(32, activation=\"relu\")(final)\nfinal = Dense(1)(final)\nmodel = Model(inputs=inputs, outputs=final)\nmodel.compile(optimizer=\"rmsprop\", loss='mean_squared_error')\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2a44b3b7b87ca26e157e18acda5da125deab6f77"},"cell_type":"code","source":"train = data[data.deal_probability.notnull()]\ntest = data.drop(train.index)\nX = {k: train[[k]].values for k in cat_cols}\nnumeric = train[[\"price\", \"item_seq_number\"]]\nnumeric = (numeric - numeric.mean(axis=0)) / numeric.std(axis=0)\nX[\"numeric\"] = numeric\ny = train[\"deal_probability\"].values\n\nX_test = {k: test[[k]].values for k in cat_cols}\nnumeric = test[[\"price\", \"item_seq_number\"]]\nnumeric = (numeric - numeric.mean(axis=0)) / numeric.std(axis=0)\nX_test[\"numeric\"] = numeric","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5446d0eac7438b10cd82d735f5d0b1f54c59d638"},"cell_type":"code","source":"model.fit(X, y, batch_size=10000, epochs=30, validation_split=0.1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"03b2382d7c1cf503350157001f651241c9a616fc"},"cell_type":"code","source":"inputs = []\nembeddings = []\nfor c in cat_cols:\n    size = data[c].unique().shape[0]\n    inp = Input((1,), name=c)\n    inputs.append(inp)\n    emb = Flatten()(Embedding(size, output_dim=min(max(int(size ** 0.25), 1), 4))(inp))\n    embeddings.append(emb)\nnumeric = Input((2,), name=\"numeric\")\ninputs.append(numeric)\nfinal = concatenate(embeddings + [numeric])\n# final = Dense(256, activation=\"relu\")(final)\n# final = Dense(128, activation=\"relu\")(final)\nfinal = BatchNormalization()(final)\nfinal = Dropout(0.5)(final)\nfinal = Dense(64)(final)\nfinal = PReLU()(final)\nfinal = BatchNormalization()(final)\nfinal = Dropout(0.5)(final)\nfinal = Dense(32)(final)\nfinal = PReLU()(final)\nfinal = BatchNormalization()(final)\nfinal = Dropout(0.5)(final)\nfinal = Dense(1)(final)\nmodel = Model(inputs=inputs, outputs=final)\nmodel.compile(optimizer=\"rmsprop\", loss='mean_squared_error')\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"568d2f1c0f7bcfad3903be897abc8c571e610a5c"},"cell_type":"code","source":"model.fit(X, y, batch_size=1000, epochs=30, validation_split=0.1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"08e294cfd5d2b04093a0dd7dd28827450ed798b1"},"cell_type":"code","source":"preds = model.predict(X_test)[:, -1]\npreds = pd.Series(preds, index=test.index, name=\"deal_probability\").clip(0, 1)\npreds.to_csv(\"preds.csv\", index=True, header=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0f229afb4f0853d85bab5e1934b818abda3adbd4"},"cell_type":"code","source":"!head preds.csv","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"775ddba33048572122959de1b7590033349a079c"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.6"}},"nbformat":4,"nbformat_minor":1}