{"cells":[{"metadata":{"trusted":true,"_uuid":"3137754005bf9f85da8326dc8e2351bd27613253"},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom pandas import DataFrame, Series\n\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom keras.utils import np_utils\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Activation, Dropout, Flatten\nfrom keras.layers import Conv2D, MaxPooling2D # 원래 CNN할려구 했는데 귀찮아서 안했음\nfrom keras import optimizers\n\nfrom sklearn.model_selection import train_test_split, StratifiedKFold\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.preprocessing import MinMaxScaler\n\nimport xgboost as xgb\nimport re","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"75cfd8eb67eaab9c1d3593d708d5681442d2aa80"},"cell_type":"code","source":"dataTrain = pd.read_csv('../input/train.csv')\ndataTest = pd.read_csv('../input/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"04d28665caab1a3d4eee4c5260f62fe5ab6e2c19"},"cell_type":"code","source":"### 학습, 테스트자료에 Null 값을 확인\nfor col in dataTrain.columns.tolist():\n    length = len(dataTrain[col])\n    lengthNull = len(dataTrain[col].dropna())\n    print('Null values of {:s} is {:d}'.format(col, length - lengthNull))\n # 학습자료에는 Age, Cabin 그리고 Embarked 에 Null 값이 있다.\n\nfor col in dataTest.columns.tolist():\n    length = len(dataTest[col])\n    lengthNull = len(dataTest[col].dropna())\n    print('Null values of {:s} is {:d}'.format(col, length - lengthNull))\n # Age, Fare have null values on test data.\n # 테스트자료에는 Age, Fare 그리고 Cabin에 Null 값이 있다.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"97c85f912e96f8909da05eeb762c5e726d69cd44"},"cell_type":"code","source":"### 이름(Name)에 호칭을 찾기\nnameWords = []\nfor i in dataTrain['Name']:\n    i = re.sub('[,.()\"]', '', i).strip().split(' ')\n    for j in i:\n        nameWords.append(j)\nnameTitles = Series(nameWords).value_counts()[:10]\nprint(nameTitles) # 대충 다음과 같은 호칭을 찾을 수 있다 - Mr, Miss, Mrs, Master\ndel i, j, nameWords, nameTitles","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7a017fbc3c84413b3cf9ae3de6d648262fd8dc01"},"cell_type":"code","source":"### 호칭(Mr, Miss, Mrs, Master)을 숫자형태로 변환\ndef nameClassifier(dataset):\n    nameList = []\n    for name in dataset:\n        if re.search('Master', name) != None:\n            nameList.append(0)\n        elif re.search('Mrs', name) != None:\n            nameList.append(1)\n        elif re.search('Mr', name) != None:\n            nameList.append(2)\n        elif re.search('Miss', name) != None:\n            nameList.append(3)\n        else:\n            nameList.append(4)\n    return Series(nameList)\ndataTrain['segName'] = nameClassifier(dataTrain['Name'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9826bb2af2ce265c1df41b8f3b8fa81897b798f5"},"cell_type":"code","source":"### 전체 가족숫자를 만들어 봅시다 !\ndef familySize(dataset):\n    return dataset['SibSp'] + dataset['Parch']\ndataTrain['Family'] = familySize(dataTrain)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"219787959fbdd54557b7ea842235e8c7e89a762a"},"cell_type":"code","source":"### 'Pclass', 'Sex', 'SibSp', 'Parch', 'Embarked', 'segName', 'Family' 에 대한 생존/사망\nfig, ax = plt.subplots(2, 4, figsize=(18, 8))\ncolnames= ['Pclass', 'Sex', 'SibSp', 'Parch', 'Embarked', 'segName', 'Family']\ni = 0\nfor row in range(2):\n    for col in range(4):\n        try:\n            temp = dataTrain.groupby([colnames[i], 'Survived']).agg({'PassengerId':'count'}).reset_index()\n            sns.barplot(data=temp, x=colnames[i], y='PassengerId', hue='Survived', ax=ax[row, col])\n            i += 1\n        except:\n            continue\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d81f4c71eb00b341133b8aba531ce0b3366c86bc"},"cell_type":"markdown","source":"1) Pclass : 돈 없으면 죽는다. (팔자다...)<br/>\n2) Sex : 여성의 생존이 많다.<br/>\n3) SibSp이 1명일 때, 생존이 더 많다.(Pclass에 따른 비교가 필요하다.)<br/>\n4) Parch : 1 - 3일 때, 생존이 더 많다.(Pclass에 따른 비교가 필요하다.)<br/>\n5) Embarked : S일 때, 사망이 많다.(S 항구가 낮은 등급 사람들이 많이 탑승했나?)<br/>\n6) segName : 호칭이 Mr일때 사망이 많았다. (기사도?)<br/>\n7) Family : 전체 가족수가 1 - 3일때 생존이 더 많았다.(Pclass에 따른 비교가 필요하다.)<br/>"},{"metadata":{"trusted":true,"_uuid":"e19f8c3899784b9a42f0ffa3066c188e3a8f8d27"},"cell_type":"code","source":"### 'SibSp', 'Parch', 'Family', 'Embarked'별, Pclass 등급확인\nfig, ax = plt.subplots(2, 2, figsize=(18, 8))\ncolnames= ['SibSp', 'Parch', 'Family', 'Embarked']\ni = 0\nfor row in range(2):\n    for col in range(2):\n        try:\n            # temp = dataTrain.groupby(['Pclass', 'Survived', colnames[i]]).agg({'PassengerId':'count'}).reset_index()\n            temp = dataTrain.groupby(['Pclass', colnames[i]]).agg({'PassengerId':'count'}).reset_index()\n            # temp['Class_Survived'] = temp['Pclass'].astype(str) + '_' + temp['Survived'].astype(str)\n            sns.barplot(data=temp, x=colnames[i], y='PassengerId', hue='Pclass', ax=ax[row, col])\n            i += 1\n        except:\n            continue\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"12111cb1908c8135833082324c15dff74dd2044d"},"cell_type":"markdown","source":"예상대로 생존비율이 낮은 항목의 집단이 낮은 Pclass를 차지하고 있다. (돈이 왠수다)"},{"metadata":{"trusted":true,"_uuid":"8efe68255d3fcffc49080b6235b1de4b720fec7a"},"cell_type":"code","source":"### 남성/여성(Sex)를 0/1로 변환\ndef sexClassifier(dataset):\n    return Series([1 if i == 'male' else 0 for i in dataset])\ndataTrain['segSex'] = sexClassifier(dataTrain['Sex'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9cecf9d624fc73e6aae2758bcb201168e0df861c"},"cell_type":"code","source":"### (Pclass)를 0-2로 변환\ndef pclassClassifier(dataset):\n    return dataset -1\ndataTrain['segPclass'] = pclassClassifier(dataTrain['Pclass'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d6dff1c0cf7b2727d1c00cdf17e3124eba166989"},"cell_type":"code","source":"### SibSp를 숫자형태로 변환\nprint(dataTrain.pivot_table(index=['SibSp'], columns=['Survived'], values=['PassengerId'], aggfunc='count', fill_value=0))\n # 생존자가 더 많은 분류에 1을, 사망자가 더 많은 경우 0을\ndef sibClassifier(dataset):\n    return Series([1 if (1 <= i) & (i <= 2) else 0 for i in dataset])\n    # return Series([0 if 0 == i else 1 for i in dataset])\ndataTrain['segSib'] = sibClassifier(dataTrain['SibSp'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2bf9fae3068a2fa500ff8725912e54a2b03fdf4c"},"cell_type":"code","source":"### Parch를 숫자형태로 변환\nprint(dataTrain.pivot_table(index=['Parch'], columns=['Survived'], values=['PassengerId'], aggfunc='count', fill_value=0))\n # 생존자가 더 많은 분류에 1을, 사망자가 더 많은 경우 0을\ndef parClassifier(dataset):\n    return Series([0 if (1 <= i) & (i <= 3) else 1 for i in dataset])\n    # return Series([0 if 0 == i else 1 for i in dataset])\ndataTrain['segPar'] = parClassifier(dataTrain['Parch'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"23616fc22789eaae51a6d9b58751948872b4b5fa"},"cell_type":"code","source":"### Family 를 0/1 숫자형태로 변환\ndef familyClassifier(dataset):\n    return Series([0 if (1 <= i) & (i <= 3) else 1 for i in dataset])\ndataTrain['segFamily'] = familyClassifier(dataTrain['Family'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"29cd493fef1ed7129ebdef90887e9289f00a65f2"},"cell_type":"code","source":"### 객실(Cabin) 유무로 생존/사망 확인 : 객실이 없는 경우 사망율이 높다\nprint(dataTrain[dataTrain['Cabin'].isnull()].groupby(['Pclass', 'Survived'])['PassengerId'].count(), '\\n')\nprint(dataTrain[dataTrain['Cabin'].notnull()].groupby(['Pclass', 'Survived'])['PassengerId'].count())\ndef cabinClassifier(dataset):\n    temp = pd.DataFrame(dataset)\n    temp.loc[temp[temp.columns[0]].notnull(), temp.columns] = 1\n    temp.loc[temp[temp.columns[0]].isnull(), temp.columns] = 0\n    return temp[temp.columns]\ndataTrain['segCabin'] = cabinClassifier(dataTrain['Cabin'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ebed1147cb9e9633215f493cffeeee1801ecbe2a"},"cell_type":"code","source":"### 요금을 quartile을 기준으로 숫자로 변환 : 플롯은 그리기 귀찮아서 그런데... 대충 비쌀 수록 안죽는다.\ndef fareClassifier(dataset):\n    return pd.qcut(dataset, [0, .25, .5, .75, 1], labels=[0, 1, 2, 3]).astype(int)\ndataTrain['segFare'] = fareClassifier(dataTrain['Fare'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"50b8354d20f7a7389a5a57ecae25434812b9943e"},"cell_type":"code","source":"### 나이(Age)의 Null 값을 채우기 (Null이 아닌 레코드의 4가지 Feature 조합으로 나이의 중위수을 채운다)\ndataAgeSet = dataTrain.groupby(['Pclass', 'segName', 'segSib', 'segPar']).agg({'Age':'median'}).reset_index() # 조합별 나이의 중위수를 구함 \ndataTrain = dataTrain.merge(dataAgeSet, on=['Pclass', 'segName', 'segSib', 'segPar'], how='left', suffixes=('','_y')) # 상기구한 조합을 Join\ndataTrain['Age'] = dataTrain['Age'].where(dataTrain['Age'].notnull(), dataTrain['Age_y']) # Null 값을 채움\ndel dataTrain['Age_y']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b512c9ed76f2263845139d0ecb708d403e9b8b65"},"cell_type":"code","source":"### 나이별 히스토그램인데, 그냥 그려봄\nfig, ax = plt.subplots(1,2, figsize=(12, 6))\nax[0].hist(dataTrain['Age'])\nax[1].boxplot(dataTrain['Age'])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"90d9ba0a29de1cd9866988977aa03a07a96af7f1"},"cell_type":"code","source":"# 나이를 quartile을 기준으로 숫자로 변환\ndef ageClassifier(dataset):\n    return pd.qcut(dataset, [0, .25, .5, .75, 1], labels=[0, 1, 2, 3]).astype(int)\ndataTrain['segAge'] = ageClassifier(dataTrain['Age'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2b93d184e99338a48b17e52dc53f290d23e592a5"},"cell_type":"code","source":"### 탑승항구(Embarked)의 Null 값을 채우기 (Null이 아닌 레코드의 4가지 Feature 조합으로 항구의 최빈값을 채운다)\ndataEmbarkedSet = dataTrain.groupby(['Pclass', 'segName', 'segSib', 'segPar']).agg({'Embarked':lambda x: x.mode()}).reset_index()  # 조합별 항구의 최빈값을 구함 \ndataTrain = dataTrain.merge(dataEmbarkedSet, on=['Pclass', 'segName', 'segSib', 'segPar'], how='left', suffixes=('','_y')) # 상기구한 조합을 Join\ndataTrain['Embarked'] = dataTrain['Embarked'].where(dataTrain['Embarked'].notnull(), dataTrain['Embarked_y']) # Null 값을 채움\ndel dataTrain['Embarked_y']\n\ndef ebkClassifier(dataset): # 탑승항구(Embarked)를 숫자로 변환\n    lists = []\n    for row in dataset:\n        if re.search('S', row) != None:\n            lists.append(0)\n        elif re.search('C', row) != None:\n            lists.append(1)\n        elif re.search('Q', row) != None:\n            lists.append(2)\n        else:\n            lists.append(3)\n    return Series(lists)\ndataTrain['segEmbarked'] = ebkClassifier(dataTrain['Embarked'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"19832b6cd46d309f9f075ca9ae5a14d6dd4b053f"},"cell_type":"code","source":"### 분석에 필요한 Feature만 추출\ndataTrainTemp = dataTrain[['segName', 'segSex', 'segPclass', 'segSib', 'segFamily', 'segPar', 'segFare', 'segAge']] # 몇번 돌리다보니 이 조합이 가장 좋음\n\ndef transformEncoding(dataset): # One hot encoidng 형태로 바꿔주는 함수\n    temp1 = pd.DataFrame()\n    for col in dataset.columns:\n        if len(dataset[col].unique()) == 2:\n            temp0 = dataset[col]\n        else:\n            temp0 = pd.get_dummies(dataset[col])\n            temp0.columns = [col + str(i) for i in temp0.columns]\n        temp1 = pd.concat([temp1, temp0], axis=1)\n    return temp1\n\nX = transformEncoding(dataTrainTemp).values # 학습 Features\ny = dataTrain['Survived'].values.reshape(len(dataTrainTemp), 1).astype(int) # 답안 Label","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8f6378b4ac9047706080b0fd7c83d0e6ac00f6d7"},"cell_type":"code","source":"### 모형함수 : 원래 여러개 만들어야 하는데, 귀찮아서 2개로 때웁니다. 회사일 때문에 잠을 못자서 피곤해요... (CNN은 만들다가 망해서 빼버림)\ndef modelXGB(X_train, y_train):\n    model = xgb.XGBClassifier(max_depth=50, n_estimators=700, n_jobs=-1, learning_rate=0.005, gamma=0.01) # 이게 잴 좋더라구요.\n    model.fit(X_train, y_train)\n    return model\n\ndef modelMLP(X_train, y_train, n_epoch, n_batch, optm): # 그냥 특징없는 인공신경망\n    model = Sequential()\n    model.add(Dense(256, input_shape=(X_train.shape[1], ), activation='relu'))\n    model.add(Dropout(0.4))\n    model.add(Dense(512, activation='relu'))\n    model.add(Dropout(0.4))\n    model.add(Dense(256, activation='relu'))\n    model.add(Dropout(0.4))\n    model.add(Dense(y_train.shape[1], activation='sigmoid'))\n    model.compile(loss='binary_crossentropy', optimizer=optm, metrics=['accuracy'])\n    model.fit(X_train, y_train, epochs=n_epoch, batch_size=n_batch)\n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a3a1a7f01869ec8b8f8d06d72cd9725553cdca93"},"cell_type":"code","source":"### 파라메터는 이정도로~\nn_epoch = 100\nn_batch = 50\noptm = optimizers.Adam(lr=0.0001)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"caabb4b3f1f711b6f0e78549c121a7ba9eb146d2"},"cell_type":"code","source":"### K-Fold Cross Validation : 피곤해도 교차검증은 해야죠.\nkfold = StratifiedKFold(n_splits=5, random_state=0)\naccuracyXGB, accuracyMLP, accuracyENS = [], [], []\nfor train, test in kfold.split(X, y, groups=y):\n    \n    # XGBoost\n    model1 = modelXGB(X[train], y[train])\n    accuracy1 = model1.score(X[test], y[test])\n    print(accuracy1)\n    accuracyXGB.append(accuracy1)\n    \n    # MLP\n    model2 = modelMLP(X[train], y[train], n_epoch, n_batch, optm)\n    accuracy2 = model2.evaluate(X[test], y[test])[1]\n    print(accuracy2)\n    accuracyMLP.append(accuracy2)\n    \n    # 2개 합친거\n    pred1 = model1.predict_proba(X[test])[:, 1]; pred1 = pred1.reshape(len(pred1))\n    pred2 = model2.predict_proba(X[test]); pred2 = pred2.reshape(len(pred2))\n    pred = (pred1 + pred2) / 2\n    pred = np.array([1 if i > 0.5 else 0 for i in pred])\n    accuracy3= accuracy_score(pred, y[test].reshape(len(y[test])))\n    accuracyENS.append(accuracy3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6a71d6d0b7e64bfa39fb12908748f196decafb4e"},"cell_type":"code","source":"### 3개 모형 (CNN / MLP / 두개 소프트 배깅) : 이젠 XGBoost 뿐이야 !\naccTable1 = DataFrame({'accuracy':accuracyXGB, 'model':'XGB'})\naccTable2 = DataFrame({'accuracy':accuracyMLP, 'model':'MLP'})\naccTable3 = DataFrame({'accuracy':accuracyENS, 'model':'Ensemble'})\naccTable = pd.concat([accTable1, accTable2, accTable3], axis=0)\ndel accTable1, accTable2, accTable3\naccTableAgg = accTable.groupby(['model']).agg({'accuracy':['mean', 'max', 'min', 'std']})\nprint(accTableAgg)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"389770d215a10b7ab6965651f415a81b40c68eac"},"cell_type":"code","source":"### 3개 모형 (CNN / MLP / 두개 소프트 배깅) 시각화로 봅시다 : 이젠 XGBoost 뿐이야 !\nfig, ax = plt.subplots(1,3, figsize=(16,5))\nplt.suptitle('K-Fold Cross Validation (K=5)')\nfor i, col in enumerate(accTable['model'].unique().tolist()):\n    temp = accTable[accTable['model'] == col]\n    ax[i].bar(range(len(temp)), temp['accuracy'])\n\n    ax[i].set_ylim(accTable['accuracy'].min()*.95, accTable['accuracy'].max())\n\n    ax[i].set_title('Accuracy : {}'.format(col))\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"66d9b879afa4601318f00bed4711087593f32aa9"},"cell_type":"markdown","source":"# 이제 예측을 해봅시다 !"},{"metadata":{"trusted":true,"_uuid":"1ea81ab9f26006732205993c8a22a3a36707bf97"},"cell_type":"code","source":"### 테스트 자료 전처리 : 위에서 만든 함수들로 전처리함\ndataTest['segName'] = nameClassifier(dataTest['Name'])\ndataTest['Family'] = familySize(dataTest)\ndataTest['segSex'] = sexClassifier(dataTest['Sex'])\ndataTest['segPclass'] = pclassClassifier(dataTest['Pclass'])\ndataTest['segSib'] = sibClassifier(dataTest['SibSp'])\ndataTest['segPar'] = parClassifier(dataTest['Parch'])\ndataTest['segFamily'] = familyClassifier(dataTest['Family'])\ndataTest['segCabin'] = cabinClassifier(dataTest['Cabin'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0cc061ecc2535f40904acab0a77f13c9c4a3b59c"},"cell_type":"code","source":"### 테스트 자료에 나이(Age) Null 값을 체움\ndataAgeSet = dataTrain.groupby(['Pclass', 'segName', 'segSib', 'segPar']).agg({'Age':'median'}).reset_index() # 조합별 나이의 중위수를 구함 \ndataTest = dataTest.merge(dataAgeSet, on=['Pclass', 'segName', 'segSib', 'segPar'], how='left', suffixes=('','_y')) # 상기구한 조합을 Join\ndataTest['Age'] = dataTest['Age'].where(dataTest['Age'].notnull(), dataTest['Age_y']) # Null 값을 채움\ndel dataTest['Age_y']\n\ndataAgeSet = dataTrain.groupby(['Pclass', 'segName', 'segSib']).agg({'Age':'median'}).reset_index() # 조합별 나이의 중위수를 구함 \ndataTest = dataTest.merge(dataAgeSet, on=['Pclass', 'segName', 'segSib'], how='left', suffixes=('','_y')) # 상기구한 조합을 Join\ndataTest['Age'] = dataTest['Age'].where(dataTest['Age'].notnull(), dataTest['Age_y']) # Null 값을 채움\ndel dataTest['Age_y']\n\ndataAgeSet = dataTrain.groupby(['segName', 'segSib', 'segPar']).agg({'Age':'median'}).reset_index() # 조합별 나이의 중위수를 구함 \ndataTest = dataTest.merge(dataAgeSet, on=['segName', 'segSib', 'segPar'], how='left', suffixes=('','_y')) # 상기구한 조합을 Join\ndataTest['Age'] = dataTest['Age'].where(dataTest['Age'].notnull(), dataTest['Age_y']) # Null 값을 채움\ndel dataTest['Age_y']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"66b2d6d7e0903ba58688f50571d845a25107097e"},"cell_type":"code","source":"### 테스트 자료에 요금(Fare) Null 값을 체움\ndataFareSet = dataTrain.groupby(['Pclass', 'segName', 'segSib', 'segPar']).agg({'Fare':'median'}).reset_index() # 조합별 나이의 중위수를 구함 \ndataTest = dataTest.merge(dataFareSet, on=['Pclass', 'segName', 'segSib', 'segPar'], how='left', suffixes=('','_y')) # 상기구한 조합을 Join\ndataTest['Fare'] = dataTest['Fare'].where(dataTest['Fare'].notnull(), dataTest['Fare_y']) # Null 값을 채움\ndel dataTest['Fare_y']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d02c59214f2e02eec90e28b28682cf42fbee97f9"},"cell_type":"code","source":"### 나머지 Feature 변환\ndataTest['segFare'] = fareClassifier(dataTest['Fare'])\ndataTest['segAge'] = ageClassifier(dataTest['Age'])\ndataTest['segEmbarked'] = ebkClassifier(dataTest['Embarked'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6168e1d5a9affae70045c0baefd6a03a6ed74301"},"cell_type":"code","source":"### One Hot Encoding으로 변환\ndataTestTemp = dataTest[['segName', 'segSex', 'segPclass', 'segSib', 'segFamily', 'segPar', 'segFare', 'segAge']]\nX_test = transformEncoding(dataTestTemp).values","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d881d62b8a2fedc0f7bd3032a1997357a811d655"},"cell_type":"code","source":"### 모형 : XGB로 갑시다\nmodel1 = modelXGB(X, y)\npred = model1.predict(X_test)\npred = Series(pred)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e632c6f173e5151f2c13a98235760f3f9bb04b5a"},"cell_type":"code","source":"submission = pd.read_csv('../input/sample_submission.csv')\nsubmission['Survived'] = pred","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3f92c2fb2831fc86102ce951c02597044a63f64c"},"cell_type":"code","source":"submission.head() # 올~~~","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5da40457e1c37bc6515b65af8a95361841609897"},"cell_type":"code","source":"# 두근두근 제출완료\nsubmission.to_csv('./submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5874b3425ee3f62378f3623a65f0f295c78768e6"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"24108110e77cf7bfdea9d8f18a22840b48ac8fdf"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}