{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import gensim\nimport pandas as pd\nimport numpy as np\nimport multiprocessing\nimport os\nfrom sklearn.metrics import log_loss, make_scorer\nfrom time import time\nimport numpy as np\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.ensemble import GradientBoostingClassifier\nfrom sklearn.svm import SVC\nfrom sklearn.model_selection import GridSearchCV\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.linear_model import LogisticRegression\nimport xgboost as xgb\nfrom numpy import absolute\nfrom warnings import filterwarnings\n\n# ignore the cluttering warning messages\nfilterwarnings('ignore')","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:30.492428Z","iopub.execute_input":"2022-07-12T17:11:30.496010Z","iopub.status.idle":"2022-07-12T17:11:31.824077Z","shell.execute_reply.started":"2022-07-12T17:11:30.495320Z","shell.execute_reply":"2022-07-12T17:11:31.822456Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Read Data\ntrain_data = pd.read_csv('/kaggle/input/feedback-prize-effectiveness/train.csv')\ntest_data = pd.read_csv('/kaggle/input/feedback-prize-effectiveness/test.csv')","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:31.826784Z","iopub.execute_input":"2022-07-12T17:11:31.827202Z","iopub.status.idle":"2022-07-12T17:11:32.244996Z","shell.execute_reply.started":"2022-07-12T17:11:31.827152Z","shell.execute_reply":"2022-07-12T17:11:32.242097Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:32.250889Z","iopub.execute_input":"2022-07-12T17:11:32.251991Z","iopub.status.idle":"2022-07-12T17:11:32.264654Z","shell.execute_reply.started":"2022-07-12T17:11:32.251867Z","shell.execute_reply":"2022-07-12T17:11:32.260869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train_data.tail()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:32.268284Z","iopub.execute_input":"2022-07-12T17:11:32.268954Z","iopub.status.idle":"2022-07-12T17:11:32.303118Z","shell.execute_reply.started":"2022-07-12T17:11:32.268852Z","shell.execute_reply":"2022-07-12T17:11:32.301393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# test_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:32.310181Z","iopub.execute_input":"2022-07-12T17:11:32.311310Z","iopub.status.idle":"2022-07-12T17:11:32.327384Z","shell.execute_reply.started":"2022-07-12T17:11:32.311220Z","shell.execute_reply":"2022-07-12T17:11:32.325703Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# \"Total Null count in train data : \", train_data.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:32.330419Z","iopub.execute_input":"2022-07-12T17:11:32.330959Z","iopub.status.idle":"2022-07-12T17:11:32.355539Z","shell.execute_reply.started":"2022-07-12T17:11:32.330865Z","shell.execute_reply":"2022-07-12T17:11:32.354401Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# \"Total Null count in test data : \", test_data.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:32.356691Z","iopub.execute_input":"2022-07-12T17:11:32.357033Z","iopub.status.idle":"2022-07-12T17:11:32.385018Z","shell.execute_reply.started":"2022-07-12T17:11:32.357000Z","shell.execute_reply":"2022-07-12T17:11:32.382982Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def clean_text(text):\n    stop_symbols = ['.','?',',',';','\\'','\\\"','-','!','&','#','%']\n    for symbol in stop_symbols:\n        text = text.replace(symbol,'')\n    return text.lower()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:32.386543Z","iopub.execute_input":"2022-07-12T17:11:32.386866Z","iopub.status.idle":"2022-07-12T17:11:32.420326Z","shell.execute_reply.started":"2022-07-12T17:11:32.386838Z","shell.execute_reply":"2022-07-12T17:11:32.417975Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sentences = []\nfor files in os.listdir('../input/feedback-prize-effectiveness/train'):\n    fd = open('../input/feedback-prize-effectiveness/train/'+files,'r')\n    text = list(map(clean_text,fd.read().split('\\n')))\n    for s in text:\n        if len(s)>0:\n            temp = s.split(' ')\n            sentences.append(temp)\n            \n# Word2Vec \nembed_model = gensim.models.Word2Vec(sentences,vector_size=200,window=3,workers=multiprocessing.cpu_count(),sg = 0)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:32.422101Z","iopub.execute_input":"2022-07-12T17:11:32.422462Z","iopub.status.idle":"2022-07-12T17:11:44.132995Z","shell.execute_reply.started":"2022-07-12T17:11:32.422423Z","shell.execute_reply":"2022-07-12T17:11:44.131687Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Helper preprocessing routines.\n\n    \n\ndef stringEncoding(column_list, df):\n    for column in column_list:\n        if column in df.columns:\n            distincts=df[column].unique()\n            if len(distincts) <= 2:\n                mapping = {distincts[i] : i for i in range(len(distincts))}\n                df[column].replace(mapping,inplace=True)\n            else:\n                df = pd.get_dummies(df,columns=[column])\n    return df\n\ndef cleanTextCol(df, column_name=\"discourse_text\"):\n    selected = df[column_name].values\n    cleaned = list(map(clean_text, selected))\n    df.drop(column_name, axis=1, inplace=True)\n    df[column_name] = cleaned\n    return df\n\ndef transform2Embedding(text):\n    global embed_model\n    embedding = np.zeros((200,))\n    ctr = 0\n    for word in text:\n        try:\n            temp = embed_model.wv[word]            \n            embedding += temp\n            ctr+=1\n        except:\n            #print(f\"{word} does not exists!\")\n            continue\n    return embedding/ctr\n    \ndef generateX(df):\n    d_txt = np.array(list(map(transform2Embedding,df['discourse_text'].values)))\n    features = []\n    for col in df.columns:\n        if 'discourse_type' in col:\n            features.append(col)\n    features = list(set(features).difference(set(['discourse_type_Rebuttal','discourse_type_Counterclaim'])))\n    d_type = np.array(df[features].values)\n    data = np.concatenate((d_txt, d_type),axis=1)\n    return data\n\ndef generateY(df, mode=0):\n    target = []\n    for column in df:\n        if 'discourse_effectiveness' in column:\n            target.append(df[column].values)\n    if mode==0:\n        return np.array(target).T\n    else:\n        return np.array(target[0]), np.array(target[1]), np.array(target[2])","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:44.135088Z","iopub.execute_input":"2022-07-12T17:11:44.135503Z","iopub.status.idle":"2022-07-12T17:11:44.153836Z","shell.execute_reply.started":"2022-07-12T17:11:44.135468Z","shell.execute_reply":"2022-07-12T17:11:44.151149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = stringEncoding(['discourse_type','discourse_effectiveness'], train_data)\ntest_data = stringEncoding(['discourse_type','discourse_effectiveness'], test_data)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:44.154964Z","iopub.execute_input":"2022-07-12T17:11:44.155282Z","iopub.status.idle":"2022-07-12T17:11:44.227435Z","shell.execute_reply.started":"2022-07-12T17:11:44.155254Z","shell.execute_reply":"2022-07-12T17:11:44.226727Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = cleanTextCol(train_data)\ntest_data = cleanTextCol(test_data)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:44.228796Z","iopub.execute_input":"2022-07-12T17:11:44.229131Z","iopub.status.idle":"2022-07-12T17:11:44.445708Z","shell.execute_reply.started":"2022-07-12T17:11:44.229101Z","shell.execute_reply":"2022-07-12T17:11:44.444647Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Features and target creation\n\ntrain_X = generateX(train_data)\ntrain_Y = generateY(train_data)\ntest_X = generateX(test_data)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:11:44.447435Z","iopub.execute_input":"2022-07-12T17:11:44.447849Z","iopub.status.idle":"2022-07-12T17:12:13.860039Z","shell.execute_reply.started":"2022-07-12T17:11:44.447807Z","shell.execute_reply":"2022-07-12T17:12:13.858852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.decomposition import PCA\npca = PCA(n_components=10)\ntrain_X = pca.fit_transform(train_X)\ntest_X = pca.transform(test_X)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:12:13.864451Z","iopub.execute_input":"2022-07-12T17:12:13.864747Z","iopub.status.idle":"2022-07-12T17:12:14.685798Z","shell.execute_reply.started":"2022-07-12T17:12:13.864721Z","shell.execute_reply":"2022-07-12T17:12:14.684868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"Explained Variance = \", round(pca.explained_variance_.sum() * 100,4)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:12:14.687513Z","iopub.execute_input":"2022-07-12T17:12:14.688141Z","iopub.status.idle":"2022-07-12T17:12:14.698559Z","shell.execute_reply.started":"2022-07-12T17:12:14.688104Z","shell.execute_reply":"2022-07-12T17:12:14.697319Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from sklearn.preprocessing import StandardScaler\n# scaler=StandardScaler()\n# train_X = scaler.fit_transform(train_X)\n# test_X = scaler.transform(test_X)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:12:14.702253Z","iopub.execute_input":"2022-07-12T17:12:14.704237Z","iopub.status.idle":"2022-07-12T17:12:14.709579Z","shell.execute_reply.started":"2022-07-12T17:12:14.704189Z","shell.execute_reply":"2022-07-12T17:12:14.708729Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_val, Y_train, Y_val = train_test_split(train_X,train_Y,test_size=0.1,shuffle=True,random_state=42, stratify=train_Y)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T17:12:14.723882Z","iopub.execute_input":"2022-07-12T17:12:14.724420Z","iopub.status.idle":"2022-07-12T17:12:14.946601Z","shell.execute_reply.started":"2022-07-12T17:12:14.724379Z","shell.execute_reply":"2022-07-12T17:12:14.945515Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# XGB\nmodel = xgb.XGBClassifier(eta=0.1,gamma=0.5, scale_pos_weight=1, alpha=1, max_depth=4, num_parallel_tree=1)\nmodel.fit(X_train,Y_train)\npredictions = model.predict(X_val)\nprint(f\"logloss : {log_loss(predictions, Y_val)}\")\npredictions = model.predict(test_X)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def generateSubmissionV1(df,Y,fname='submission.csv'):\n    result={}\n    result['discourse_id'] = df['discourse_id']\n    Y=Y.T\n    result['Ineffective'] = absolute(Y[2])\n    result['Adequate'] = absolute(Y[0])\n    result['Effective'] = absolute(Y[1])\n    result = pd.DataFrame(result)\n    result.to_csv(f\"{fname}\", index=False)\n    \ndef generateSubmissionV2(df,Y1,Y2,Y3,fname='submission.csv'):\n    result={}\n    result['discourse_id'] = df['discourse_id']\n    result['Ineffective'] = absolute(Y1)\n    result['Adequate'] = absolute(Y2)\n    result['Effective'] = absolute(Y3)\n    result = pd.DataFrame(result)\n    result.to_csv(f\"{fname}\", index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"generateSubmissionV1(test_data, predictions)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}