Lewati ke konten utama

Tutorial Kompetisi Kaggle: Machine Learning dari Titanic

Bersiap untuk Kompetisi Kaggle pertama Anda dengan tutorial langkah demi langkah ini.
Diperbarui 28 Sep 2026  · 9 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Dalam tutorial ini, kita akan menelusuri dataset Titanic, menganalisisnya, dan mengirimkan hasilnya ke kompetisi yang sebenarnya. Anda sudah mempelajari cara mengambil data dan mengimpornya ke Kaggle Notebook Anda dalam tutorial ini. Sekarang kita akan menggunakan DataLab sebagai notebook data science. Anda akan mempelajari cara menggunakan kedua alat di platform yang berbeda sehingga Anda dapat memilih yang paling Anda sukai.

Pertama, buka bagian "Competitions" di Kaggle dan cari Titanic (Gambar 5.4). Sebelum langsung masuk ke notebook, Anda harus memahami semua informasi yang dibagikan di bagian "Description and Rules". Penting juga untuk memeriksa notebook milik pengguna lain, karena ini dapat memberi Anda lebih banyak ide tentang solusinya.

Gambar 5.4: Titanic - Machine Learning from Disaster

Kompetisi ini tentang menggunakan machine learning untuk membuat model yang memprediksi penumpang mana yang akan selamat dari karamnya kapal Titanic. Kita akan menggunakan dataset yang mencakup informasi penumpang seperti nama, jenis kelamin, usia, dan sebagainya. Akan ada 2 dataset berbeda yang akan kita gunakan. Yang pertama berjudul 'train.csv'. Dalam dataset ini, selain informasi penumpang, terdapat juga nilai ground truth seperti 'survived' dan 'not survived'. Pada dataset kedua yang berjudul 'test.csv', tidak akan ada nilai ground truth, karena kita diminta untuk memprediksi nilai tersebut dan mengunggah hasilnya.

Berkas submission hanya akan memiliki 2 kolom: PassengerId dan Survived. Sistem submission akan menghasilkan galat jika Anda mencoba mengunggah berkas dengan lebih dari 2 nilai. Perlu diketahui bahwa Anda dapat mengirimkan hingga 10 submission per hari.

Dengan informasi yang diberikan di bagian "Competition Description", langkah berikutnya adalah mengambil data ke DataLab kita dan menganalisis data tersebut.

Pertama, Anda perlu mengunduh dataset di Data Explorer dengan masuk ke tab Data (Gambar 5.5). Anda harus mengunduh 'train.csv' dan 'test.csv'.

Setelah mengunduh berkas, Anda harus menuju ke DataLab. Harap dicatat bahwa Anda perlu membuat akun terlebih dahulu. Membuat akun dan menggunakan DataLab gratis.

Anda dapat dengan mudah melakukan drag and drop berkas di sisi kiri notebook (Gambar 5.6).

Gambar 5.5: Mengunduh Dataset
Gambar 5.6: Menambahkan Dataset ke DataLab

Langkah berikutnya adalah memeriksa kamus data di bagian deskripsi dataset. Ini akan membantu kita memutuskan kolom mana yang akan divisualisasikan.

  • survival: Kelangsungan hidup
  • pclass: Kelas tiket
  • sex: Jenis kelamin
  • Age: Usia dalam tahun
  • sibsp: Jumlah saudara kandung/pasangan di atas kapal Titanic
  • parch: Jumlah orang tua/anak di atas kapal Titanic
  • ticket: Nomor tiket
  • fare: Tarif penumpang
  • cabin: Nomor kabin
  • embarked: Pelabuhan keberangkatan

Mengimpor Data

Anda dapat menggunakan perintah bash di jupyter notebooks dengan menempatkan tanda seru di depan sel. Kita akan memeriksa lokasi berkas dataset yang diunggah menggunakan perintah pwd dan ls.

!pwd; ls

/work/files/workspace

notebook.ipynb test.csv train.csv

Pandas adalah pustaka Python yang digunakan untuk proses manipulasi dan analisis data. Kini kita telah menghapus kolom Ticket, Name, dan PassengerId karena tidak memiliki data numerik atau kategorikal yang bermakna. Sekarang Anda akan dapat melihat fitur lainnya yang akan digunakan.

Pada beberapa baris berikut, berkas dataset pelatihan dan pengujian dibaca menggunakan metode read_csv dari Pandas. Perhatikan bahwa kolom Survived dan PassengerId masing-masing ditambahkan ke dataframe train dan test. Kita akan memberi masukan ke model secara terpisah menggunakan fitur dalam columns_to_be_added_as_features dan label di kolom Survived. Namun untuk menyederhanakan prapemrosesan, untuk saat ini kita dapat menggabungkannya. Variabel test_df_matcher juga menyertakan PassengerId. Kita akan menggunakannya untuk mencocokkan PassengerId dengan prediksi himpunan uji, guna menghasilkan berkas CSV yang akan diunggah ke Kaggle sebagai hasil kita.

import pandas as pd
columns_to_be_added_as_features = ['Sex','Age','SibSp','Parch','Pclass','Fare','Embarked']
train_df = pd.read_csv('train.csv', usecols=columns_to_be_added_as_features + ['Survived'])
test_df_matcher = pd.read_csv('test.csv', usecols=columns_to_be_added_as_features + ['PassengerId'])
test_df = test_df[columns_to_be_added_as_features]

Dengan metode head(), kita dapat melihat 5 baris pertama beserta nama kolomnya. Anda dapat menentukan jumlah baris awal yang akan ditampilkan sebagai parameter di dalam metode head(). Jumlah baris pada himpunan pelatihan dan himpunan uji dicetak masing-masing pada sel berikut.

print(train_df.head())
Gambar 5.7: Dataframe
print("Number of rows in training set: {}".format(len(train_df)))
print("Number of rows in test set: {}".format(len(test_df)))

Number of rows in training set: 891 Number of rows in test set: 418

Prapemrosesan

Kita harus mengonversi tipe nilai menjadi float, yang akan digunakan sebagai fitur dalam model. Konversi ini memungkinkan kita melakukan beberapa operasi numerik saat menormalkan data.

for column_title in columns_to_be_added_as_features:
    if column_title in ['Embarked', "Sex"]:
        continue
    train_df[column_title] = pd.to_numeric(train_df[column_title], downcast="float")
    test_df[column_title] = pd.to_numeric(test_df[column_title], downcast="float")

train_df["Survived"] = pd.to_numeric(train_df["Survived"], downcast="float")

Kita perlu memberi masukan ke model menggunakan nilai numerik. Pada potongan kode di bawah ini string dikonversi menjadi nilai numerik

train_df['Embarked'].replace('Q', 0,inplace=True)
train_df['Embarked'].replace('S', 1,inplace=True)
train_df['Embarked'].replace('C', 2,inplace=True)

test_df['Embarked'].replace('Q', 0,inplace=True)
test_df['Embarked'].replace('S', 1,inplace=True)
test_df['Embarked'].replace('C', 2,inplace=True)

train_df['Sex'].replace('male', 0,inplace=True)
train_df['Sex'].replace('female', 1,inplace=True)

test_df['Sex'].replace('male', 0,inplace=True)
test_df['Sex'].replace('female', 1,inplace=True)

print(train_df.head())
Gambar 5.8: Dataframe dengan Nilai Numerik

Di bawah ini, semua fitur dinormalisasi, yang dalam kasus ini berarti diskalakan antara 0 dan 1.

#Credit: Michael Aquilina,
#https://stackoverflow.com/questions/26414913/normalize-columns-of-pandas-data-frame
def normalize(df):
    result = df.copy()
    for feature_name in df.columns:
        max_value = df[feature_name].max()
        min_value = df[feature_name].min()
        result[feature_name] = (df[feature_name] - min_value) / (max_value - min_value)
    return result

train_df = normalize(train_df)
test_df = normalize(test_df)

print(train_df.head())
Gambar 5.9: Dataframe Ternormalisasi

Karena dataset akan dipisah menjadi pelatihan dan validasi, kita akan mengacak dataset terlebih dahulu untuk menghindari pengelompokan hanya pada satu himpunan.

#Credit: Kris, https://stackoverflow.com/questions/29576430/shuffle-dataframe-rows
train_df = train_df.sample(frac=1).reset_index(drop=True)

Semua nilai kosong akan diganti dengan 0; pilihan ini dibuat untuk menghemat waktu. Namun, Anda dapat membaca tutorial ini untuk mempelajari cara menangani nilai hilang dalam machine learning.

train_df = train_df.fillna(0)
test_df = test_df.fillna(0)

Di bawah ini, rasio validasi ditetapkan ke 0,2, yang berarti 20% data akan digunakan untuk validasi. Untuk membagi dataset menjadi himpunan pelatihan dan validasi, kita akan menggunakan metode train_test_split dari Sklearn. Lalu kita akan memisahkan fitur dan label seperti yang ditunjukkan pada 4 baris terakhir potongan kode berikut.

validation_set_ratio = 0.2
validation_set_size = int(len(train_df)*validation_set_ratio)
training_set_size = len(train_df) - validation_set_size

print("Total set size: {}".format(len(train_df)))
print("Training set size: {}".format(training_set_size))
print("Validation set size: {}".format(validation_set_size))

from sklearn.model_selection import train_test_split

train, val = train_test_split(train_df, test_size=validation_set_ratio)

train_X = train[columns_to_be_added_as_features]
train_Label = train[['Survived']]

val_X = val[columns_to_be_added_as_features]
val_Label = val[['Survived']]

Pelatihan

Support vector machine adalah model pembelajaran terawasi yang digunakan untuk klasifikasi dan regresi. Model ini dipilih dengan parameter di bawah. Anda sebaiknya mencoba model lain dengan kombinasi parameter yang berbeda. Tidak perlu memulai dan menghentikan kode setiap kali Anda ingin mengubah parameter atau mencoba model lain, karena Anda dapat mengotomatiskan proses ini. Jika Anda tertarik dengan Support Vector Machines, Anda dapat melihat tutorial Support Vector Machines dengan Scikit-learn di DataCamp.

from sklearn.svm import SVC

SVM_KERNEL = "linear"
SVM_C = 10
SVM_GAMMA = 0.00001

svm_model = SVC(kernel = SVM_KERNEL, C = SVM_C, gamma = SVM_GAMMA)
svm_model.fit(train_X, train_Label)

Mendapatkan Prediksi Himpunan Validasi

Pada bagian ini, kita akan memberi masukan fitur himpunan validasi ke model dan mendapatkan prediksinya. Lalu kita akan membandingkannya dengan nilai ground truth. Metode metrics.accuracy_score dari Sklearn digunakan untuk memudahkan perhitungan akurasi. Akurasi himpunan validasi dihitung sebesar 0,799, yang merupakan awal yang baik.

from sklearn import metrics

y_pred = svm_model.predict(val_X)
print("Accuracy:",metrics.accuracy_score(val_Label, y_pred))

Accuracy: 0.7988826815642458

Mendapatkan Prediksi Himpunan Uji

Sekarang kita lanjut untuk mendapatkan prediksi bagi himpunan uji yang sebenarnya. Karena tidak ada nilai ground truth untuk himpunan uji, kita hanya dapat mengetahui akurasinya setelah berkas prediksi diunggah ke Kaggle.

test_pred = svm_model.predict(test_df)

Membuat Dataframe Keluaran

Kolom PassengerId diambil dari dataframe bernama test_df_matcher. Saat dikembalikan secara langsung, tipe nilai kembalian akan berupa Series. Karena itu, kita akan mengubahnya menjadi tipe Pandas DataFrame. Lalu kita akan menyisipkan prediksi himpunan uji sebagai kolom kedua dari dataframe.

result = pd.DataFrame(test_df_matcher['PassengerId'])
print(result.head(10))
Gambar 5.10: Dataframe PassengerId
result.insert(1, "Survived", test_pred, True)
result["Survived"] = pd.to_numeric(result["Survived"], downcast="integer")
print(result.head(10))
Gambar 5.11: Dataframe Final

Membuat Berkas Keluaran

Akhirnya, format keluaran sudah siap. Sebagai langkah terakhir, nilai indeks akan dihapus dengan memberikan False pada parameter index. Sekarang Anda dapat mengunduh berkas yang dihasilkan dan mengunggahnya ke Kaggle. Dengan cara ini, Anda akan mengetahui akurasi himpunan uji, setelah itu Anda akan masuk ke papan peringkat.

result.to_csv("out.csv", index=False)

Sekarang kita akan kembali ke halaman kompetisi dan klik "Submit Predictions" lalu unggah berkas prediksi. Setelah beberapa detik, Anda akan mendapatkan akurasi uji Anda (Gambar 5.12).

Gambar 5.12: Akurasi Himpunan Uji

Kesimpulan

Dalam tutorial ini, Anda telah mempelajari cara menganalisis sebuah dataset dan mengirimkan hasil Anda ke kompetisi Kaggle. Jika Anda menikmati kompetisi data science, Anda dapat mempelajari lebih lanjut tentang DataCamp Competitions di sini.

Topik
Machine Learning
DataLab
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya