Artikel ini akan membahas mengenai proses modeling untuk data kapal Titanic menggunakan metode Random Forrest. Proses yang akan dilakukan adalah melatih model Machine Learning dan membandingkan hasilnya. Perhatikan bahwa karena kumpulan data tidak menyediakan label untuk kumpulan pengujiannya, maka perlu menggunakan prediksi pada kumpulan pelatihan untuk membandingkan algoritma satu sama lain. Selanjutnya, akan menggunakan cross validation untuk mendapatkan hasil pembelajaran yang lebih akurat.
Artikel ini merupakan kelanjutan dari Belajar Data Science – Preprocessing Data Kapal Titanic (Bagian 3). Silahkan baca artikelnya sebelumnya melanjutkan. Data kapal Titanic dapat di akses melalui situs Kaggle.
Import Pustaka
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import confusion_matrix,precision_score
from sklearn.metrics import recall_score,f1_score, roc_auc_score
Modeling
X_train = train_df.drop('Survived', axis=1)
Y_train = train_df['Survived']
X_test = test_df.drop('PassengerId', axis=1)
Random forest
Random Forest adalah supervised learning algorithm. Random Forest membangun beberapa pohon keputusan dan menggabungkannya untuk mendapatkan prediksi yang lebih akurat dan stabil. Satu keuntungan besar dari Random Forest adalah dapat digunakan untuk masalah klasifikasi dan regresi, yang membentuk sebagian besar sistem pembelajaran mesin saat ini. Dengan beberapa pengecualian, pengklasifikasi Random Forest memiliki semua hyperparameter dari pengklasifikasi pohon keputusan dan juga semua hyperparameter dari pengklasifikasi bagging, untuk mengontrol ansambel itu sendiri.
random_forest = RandomForestClassifier(n_estimators=100)
random_forest.fit(X_train, Y_train)
Y_prediction = random_forest.predict(X_test)
random_forest.score(X_train, Y_train)
acc_random_forest = round(random_forest.score(X_train, Y_train)* 100, 2)
results = pd.DataFrame({
'Model' : ['Random Forest'],
'Score' : [acc_random_forest]
})
results
hasil dari kode diatas adalah
Random Forest 90.68
K-Fold Cross Validation
Bagaimana kinerja Random Forest saat digunakan validasi silang. K-Fold Cross Validation secara acak membagi data pelatihan menjadi subset K yang disebut folds. Bayangkan data akan dibagi menjadi 10 folds (K = 10). Model Random Forest yang akan dilatih dan dievaluasi 10 kali, menggunakan folds yang berbeda untuk evaluasi setiap saat, sementara itu akan dilatih pada 9 folds lainnya. Oleh karena itu output array dengan 10 skor yang berbeda.
random_forest = RandomForestClassifier(n_estimators=100)
scores = cross_val_score(random_forest, X_train, Y_train, cv=10, scoring = "accuracy")
print("Scores:", scores)
print("Mean:", scores.mean())
print("Standard Deviation:", scores.std())
hasil dari kode program tersebut adalah
Scores: [0.74444444 0.80898876 0.73033708 0.84269663 0.88764045 0.85393258
0.83146067 0.78651685 0.85393258 0.79775281]
Mean: 0.8137702871410737
Standard Deviation: 0.04756243170100532
Ini terlihat jauh lebih realistis dari sebelumnya. Model memiliki akurasi rata-rata 81% dengan standar deviasi 4,7%. Deviasi standar menunjukkan seberapa tepat estimasi tersebut. Ini berarti hasil pembelajaran keakuratan model dapat berbeda + — 4,7%. Karena akurasinya cukup bagus dan Random Forest adalah model yang mudah digunakan. Untuk meningkatkan kinerjanya lebih jauh lagi sebagai berikut
Hyperparameter Tuning
Untuk meningkatkan kinerjanya dapat dilakukan hyperparameter tunning. Sekarang telah dimiliki model yang tepat, proses mengevaluasi kinerjanya dapat mulai dengan cara yang lebih akurat. Sebelumnya hanyadiggunakan akurasi dan skor oob, yang merupakan bentuk lain dari akurasi.
random_forest = RandomForestClassifier(criterion='gini',
min_samples_leaf=1,
min_samples_split=10,
n_estimators=100,
max_features='auto',
oob_score=True,
random_state = 1,
n_jobs=-1)
random_forest.fit(X_train, Y_train)
Y_prediction = random_forest.predict(X_test)
random_forest.score(X_train, Y_train)
print("obb score:", round(random_forest.oob_score_,4)*100, "%")
keluaran dari kode program diatas adalah
obb score: 83.73 %
Confusion Matrix
Baris pertama adalah tentang prediksi tidak selamat: 487 penumpang diklasifikasikan dengan benar sebagai tidak selamat (disebut true negatives) dan 62 salah diklasifikasikan sebagai tidak selamat (false positives). Baris kedua adalah tentang prediksi selamat: 98 penumpang salah diklasifikasikan selamat (false negatives) dan 2446 benar diklasifikasikan sebagai selamat (true positives).Confusion matrix memberi banyak informasi tentang seberapa baik model yang dihasilkan, tetapi ada cara untuk mendapatkan lebih banyak lagi, seperti menghitung ketepatan pengklasifikasi.
predictions = cross_val_predict(random_forest, X_train, Y_train, cv=3)
confusion_matrix(Y_train, predictions)
keluaran kode program diatas
array([[487, 62],
[ 98, 244]])
Precision and Recall
Model telah memprediksi 79% kelangsungan hidup penumpang dengan benar (presisi). Penarikan itu memberi tahu bahwa imeramalkan kelangsungan hidup 71% orang yang benar-benar selamat.
print("Precision:", precision_score(Y_train, predictions))
print("Recall:", recall_score(Y_train, predictions))
keluaran dari kode program diatas
Precision: 0.7973856209150327
Recall: 0.7134502923976608
F-Score
Precision and Recall dapat digabungkan menjadi satu nilai, yang disebut F-Score. F-Score dihitung dengan rata-rata harmonik Precision and Recall. Perhatikan bahwa ini memberikan lebih banyak bobot pada nilai rendah. Akibatnya, pengklasifikasi hanya akan mendapatkan F-Score tinggi, jika Precision and Recall tinggi.
f1_score(Y_train, predictions)
keluaran dari kode program diatas adalah
0.7530864197530864
F-score menunjukkan angka 75%. Skornya tidak terlalu tinggi, karena kami memiliki recall sebesar 71%. Sayangnya, F-score tidak sempurna, karena mendukung pengklasifikasi yang memiliki precision and recall yang serupa. Ini adalah masalah, karena terkadang diinginkan precision dan recall yang tinggi. Masalahnya adalah precision yang meningkat, terkadang menghasilkan perolehan yang menurun pada recall dan sebaliknya (depending on the threshold). Ini disebut tradeoff precision/penarikan.
Kesimpulan
Data kapal Titanic telah dilatih menggunakan model random forest, mengambil dan menerapkan cross validation pada model tersebut. Kemudian dibahas cara kerja random forest dan menyesuaikan kinerjanya dengan mengoptimalkan nilai hyperparameternya. Terakhir, ditunjukkan confusion matrix dan menghitung precision, recall and f-score.