{"cells":[{"metadata":{"_uuid":"8c1f81f442b72dd9b27ef5ee1f0f22690e7cbad9","collapsed":true,"_cell_guid":"1f34daf5-0a01-4261-96e4-383da046b1d6","trusted":false},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score\n\nfrom keras.models import Model\nfrom keras.layers import Input, Embedding, Dense, Conv2D, MaxPool2D\nfrom keras.layers import Reshape, Flatten, Concatenate, Dropout, SpatialDropout1D\nfrom keras.preprocessing import text, sequence\nfrom keras.callbacks import Callback","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1c92bd8983bd09a361aec2ac9cdcaf15e85747dd","collapsed":true,"_cell_guid":"78787220-f96d-4204-bf28-4c35ddb5ce14","trusted":false},"cell_type":"code","source":"train = pd.read_csv('../input/avito-demand-prediction/train.csv')\ntest = pd.read_csv('../input/avito-demand-prediction/test.csv')\nsubmission = pd.read_csv('../input/avito-demand-prediction/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8962f5600b91010d12e2ad6f1948eb4190278de1","collapsed":true,"_cell_guid":"ed33e72d-74be-4a3a-9ec7-f73a4f0a9fd7","trusted":false},"cell_type":"code","source":"X_train = train[\"title\"].fillna(\"fillna\").values\ny_train = train['deal_probability'].values\nX_test = test[\"title\"].fillna(\"fillna\").values","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f338ca4f88204b369a5e4bd1df9603651e3d372a","collapsed":true,"_cell_guid":"913364b5-52c1-484d-b9d9-79a67900f71d","trusted":false},"cell_type":"code","source":"max_features = 100000\nmaxlen = 15\nembed_size = 300\n\ntokenizer = text.Tokenizer(num_words=max_features)\ntokenizer.fit_on_texts(list(X_train) + list(X_test))\nX_train = tokenizer.texts_to_sequences(X_train)\nX_test = tokenizer.texts_to_sequences(X_test)\nx_train = sequence.pad_sequences(X_train, maxlen=maxlen)\nx_test = sequence.pad_sequences(X_test, maxlen=maxlen)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e7d50be1c0dbaf275fddcd900e0b9369a80ae993","collapsed":true,"_cell_guid":"0d9f8a25-8089-4dd8-8340-aaaa409aa9a0","trusted":false},"cell_type":"code","source":"def get_coefs(word, *arr): return word, np.asarray(arr, dtype='float32')\nembeddings_index = dict(get_coefs(*o.rstrip().rsplit(' ')) for o in open('../input/fasttext-russian-2m/wiki.ru.vec'))\n\nword_index = tokenizer.word_index\nnb_words = min(max_features, len(word_index))\nembedding_matrix = np.zeros((nb_words, embed_size))\nfor word, i in word_index.items():\n    if i >= max_features: continue\n    embedding_vector = embeddings_index.get(word)\n    if embedding_vector is not None: embedding_matrix[i] = embedding_vector\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b0636e404bc32c8590d3abccab26f983f2330925","collapsed":true,"_cell_guid":"3a57d234-b309-47b1-af2c-f30aca9b05b2","trusted":false},"cell_type":"code","source":"filter_sizes = [1,2,3,4]\nnum_filters = 32","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3d1e5641a1bf9524c46a556a81bd58428e3024aa","collapsed":true,"_cell_guid":"3d8c3266-f0fb-4a08-8985-b528e0798d59","trusted":false},"cell_type":"code","source":"inp = Input(shape=(maxlen, ))\nx = Embedding(max_features, embed_size, weights=[embedding_matrix])(inp)\nx = SpatialDropout1D(0.3)(x)\nx = Reshape((maxlen, embed_size, 1))(x)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"a1b4d0b1a8c38c813c4cdbba5ab5a9d9530ab6c8","collapsed":true,"_cell_guid":"bc406032-14c1-4de5-93b4-6e811ae0eb1c","trusted":false},"cell_type":"code","source":"conv_0 = Conv2D(num_filters, kernel_size=(filter_sizes[0], embed_size), kernel_initializer='normal', activation='elu')(x)\nconv_1 = Conv2D(num_filters, kernel_size=(filter_sizes[1], embed_size), kernel_initializer='normal', activation='elu')(x)\nconv_2 = Conv2D(num_filters, kernel_size=(filter_sizes[2], embed_size), kernel_initializer='normal', activation='elu')(x)\nconv_3 = Conv2D(num_filters, kernel_size=(filter_sizes[3], embed_size), kernel_initializer='normal', activation='elu')(x)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"a7e75c77915712cfd22b8e791af9b3ff2db7216e","collapsed":true,"_cell_guid":"763b7776-699a-4856-9739-9faa3ee60fad","trusted":false},"cell_type":"code","source":"maxpool_0 = MaxPool2D(pool_size=(maxlen - filter_sizes[0] + 1, 1))(conv_0)\nmaxpool_1 = MaxPool2D(pool_size=(maxlen - filter_sizes[1] + 1, 1))(conv_1)\nmaxpool_2 = MaxPool2D(pool_size=(maxlen - filter_sizes[2] + 1, 1))(conv_2)\nmaxpool_3 = MaxPool2D(pool_size=(maxlen - filter_sizes[3] + 1, 1))(conv_3)    ","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"bf727a6f13cf57ccebba8269d087a659e9c3f497","collapsed":true,"_cell_guid":"88334ae4-5278-4ad5-8e21-063b95676daf","trusted":false},"cell_type":"code","source":"z = Concatenate(axis=1)([maxpool_0, maxpool_1, maxpool_2, maxpool_3])   \nz = Flatten()(z)\nz = Dropout(0.1)(z)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"240793fca62e0112dc9e39db63d1ea92f163d750","collapsed":true,"_cell_guid":"6c40c883-ac2b-4fea-90a6-22273768ceda","trusted":false},"cell_type":"code","source":"outp = Dense(2, activation=\"softmax\")(z)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"0a67c30e45feb2cbe241ae9ad9787ed7e858a433","collapsed":true,"_cell_guid":"2b1ad284-7a23-4efd-a87d-7b85428917f1","trusted":false},"cell_type":"code","source":"model = Model(inputs=inp, outputs=outp)\nmodel.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error'])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"5556f48602e01ab8bae74487fd4a4a0f0fa6b65c","collapsed":true,"_cell_guid":"0e55510d-7f76-44d3-9bd0-d14d02f87b69","trusted":false},"cell_type":"code","source":"batch_size = 256\nepochs = 3","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"70200e36e659c0ba52f143849a5a0f5a62573628","collapsed":true,"_cell_guid":"6e022ac0-bcf1-4f14-82bb-657863f41957","trusted":false},"cell_type":"code","source":"y_train = np.array(pd.concat([pd.DataFrame(y_train),pd.DataFrame(1-y_train)],axis=1))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"2d7fe79b0cfac5a2a1ea8e612a9aa1fa71f6e68b","collapsed":true,"_cell_guid":"a91d7753-09db-4aaf-8df9-0665d429c5c7","trusted":false},"cell_type":"code","source":"hist = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=2)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d8db45a3732e70b78bca84ee37c045c350904a22","collapsed":true,"_cell_guid":"b5e8ba3b-654d-4c62-8f85-25c5cc7646e7","trusted":false},"cell_type":"code","source":"y_pred = model.predict(x_test, batch_size=1024)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"79ccb9d81b8bfd6f8c532f4ba0e842225e515f93","collapsed":true,"_cell_guid":"4aea80cf-6e36-46a1-814c-94969d15b448","trusted":false},"cell_type":"code","source":"pd.DataFrame(y_pred).to_csv('df_test_title_formal.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b31da2a5220c1f571102d0e7778b7be2bb35a4f3","collapsed":true,"_cell_guid":"7fb800f4-6ebb-4f3a-bda4-3134997a2920","trusted":false},"cell_type":"code","source":"submission['deal_probability'] = y_pred[:,0]\nsubmission.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]}],"metadata":{"language_info":{"name":"python","version":"3.6.5","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":1}