Dalam tutorial Kaggle ini, Anda akan mempelajari cara mendekati dan membangun model pembelajaran terawasi dengan bantuan exploratory data analysis (EDA) pada data Titanic.
Awal bulan ini, saya melakukan Sesi Facebook Live Code Along di mana saya (dan semua yang ikut ngoding bersama) membangun beberapa algoritme dengan kompleksitas yang meningkat untuk memprediksi apakah penumpang tertentu di Titanic selamat atau tidak, berdasarkan data seperti tarif yang mereka bayar, pelabuhan keberangkatan, dan usia.
Pada tulisan ini, Anda akan meninjau beberapa hal yang kami bahas dalam sesi tersebut. Jika Anda ingin menonton ulang atau mengikuti tulisan ini bersama videonya, Anda bisa menontonnya di sini:
Khususnya, Anda mungkin masih ingat bahwa kita membangun model pembelajaran terawasi.
Pembelajaran terawasi adalah cabang Machine Learning (ML) yang memprediksi label, seperti 'Survived' atau 'Not'. Model semacam ini belajar dari data berlabel, yaitu data yang mencantumkan apakah seorang penumpang selamat (disebut "pelatihan model"), lalu membuat prediksi pada data tanpa label.
Di Kaggle, sebuah platform untuk pemodelan prediktif dan kompetisi analitik, ini disebut set latih dan uji karena
Anda ingin membangun model yang mempelajari pola dalam set latih, dan
Kemudian menggunakan model untuk membuat prediksi pada set uji.
Kaggle kemudian memberi tahu Anda persentase jawaban benar: ini dikenal sebagai akurasi model Anda.
Cara Memulai dengan Pembelajaran Terawasi
Seperti yang mungkin sudah Anda ketahui, pendekatan yang baik untuk pembelajaran terawasi adalah sebagai berikut:
Lakukan Exploratory Data Analysis (EDA) pada set data Anda;
Bangun model cepat-ala-kadarnya, atau model baseline, yang dapat menjadi pembanding untuk model-model berikutnya yang akan Anda bangun;
Ulangi proses ini. Anda akan melakukan lebih banyak EDA dan membangun model lain;
Rekayasa fitur: ambil fitur yang sudah ada lalu gabungkan atau ekstrak informasi lebih lanjut darinya hingga akhirnya mencapai poin terakhir, yaitu
Dapatkan model yang kinerjanya lebih baik.
Dalam sesi code along ini, Anda telah atau akan melakukan semua langkah ini!
Catatan kami juga memiliki kursus yang membantu Anda mulai menggunakan machine learning untuk dataset Titanic dalam Python dan R.
Impor Data Anda dan Periksa
Langkah pertama selalu mengimpor data agar cepat memeriksa data yang akan Anda gunakan. Dalam kasus ini, Anda akan mengimpor paket pandas dan menggunakan fungsi read_csv() untuk membaca data:
Catatan bahwa pada potongan kode di bawah, paket lain dan modul dari paket seperti matplotlib, sklearn, dan seaborn sudah diimpor. Anda akan menggunakannya lebih lanjut untuk visualisasi data (statistik) dan keperluan machine learning!
Anda juga menggunakan perintah IPython magic %matplotlib inline agar plot muncul langsung di notebook. Anda juga menambahkan sns.set() ke potongan kode untuk mengubah gaya visualisasi ke gaya dasar Seaborn:
# Import modulesimport pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import tree
from sklearn.metrics import accuracy_score
# Figures inline and set visualization style%matplotlib inline
sns.set()Didukung oleh
Tanpa berlama-lama, mari impor data dan ambil langkah pertama menelaah data Anda:
# Import test and train datasets
df_train = pd.read_csv('../data/train.csv')
df_test = pd.read_csv('../data/test.csv')# View first lines of training data
df_train.head(n=4)Didukung oleh
PassengerId
Survived
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
0
1
0
3
Braund, Mr. Owen Harris
male
22.0
1
0
A/5 21171
7.2500
NaN
S
1
2
1
1
Cumings, Mrs. John Bradley (Florence Briggs Th...
female
38.0
1
0
PC 17599
71.2833
C85
C
2
3
1
3
Heikkinen, Miss. Laina
female
26.0
0
0
STON/O2. 3101282
7.9250
NaN
S
3
4
1
1
Futrelle, Mrs. Jacques Heath (Lily May Peel)
female
35.0
1
0
113803
53.1000
C123
S
Jika Anda ingin melihat apa saja fitur-fiturnya, lihat dokumentasi data Kaggle di sini.
Sebelum melanjutkan, ada baiknya memperhatikan hal berikut terkait terminologi:
Variabel target adalah variabel yang ingin Anda prediksi;
Variabel lainnya disebut "fitur" (atau "variabel prediktor", fitur yang Anda gunakan untuk memprediksi variabel target).
Dengan ini, Anda dapat lanjut menelaah data Anda, misalnya dengan fungsi head() untuk menampilkan lima baris pertama dari set data Anda:
# View first lines of test data
df_test.head()Didukung oleh
PassengerId
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
0
892
3
Kelly, Mr. James
male
34.5
0
0
330911
7.8292
NaN
Q
1
893
3
Wilkes, Mrs. James (Ellen Needs)
female
47.0
1
0
363272
7.0000
NaN
S
2
894
2
Myles, Mr. Thomas Francis
male
62.0
0
0
240276
9.6875
NaN
Q
3
895
3
Wirz, Mr. Albert
male
27.0
0
0
315154
8.6625
NaN
S
4
896
3
Hirvonen, Mrs. Alexander (Helga E Lindqvist)
female
22.0
1
1
3101298
12.2875
NaN
S
Perhatikan bahwa DataFrame df_test tidak memiliki kolom 'Survived' karena inilah yang akan Anda prediksi!
Anda juga dapat menggunakan metode DataFrame .info() untuk memeriksa tipe data, nilai hilang, dan lainnya (dari df_train).
<class'pandas.core.frame.DataFrame'>RangeIndex:891 entries,0 to 890
Data columns(total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes:float64(2),int64(5),object(5)
memory usage:83.6+KBDidukung oleh
Dalam kasus ini, Anda melihat bahwa hanya ada 714 nilai non-null untuk kolom 'Age' pada DataFrame dengan 891 baris. Ini berarti ada 177 nilai null atau hilang.
Juga, gunakan metode DataFrame .describe() untuk memeriksa statistik ringkas kolom numerik (dari df_train).
Visual Exploratory Data Analysis (EDA) dan Model Pertama Anda
Sekarang Anda sudah punya gambaran tentang data dan telah melihat beberapa statistik, saatnya juga memvisualisasikan data Anda dengan bantuan paket seaborn:
Misalnya, gunakan seaborn untuk membuat bar plot dari kelangsungan hidup di Titanic, yang merupakan variabel target Anda.
sns.countplot(x='Survived', data=df_train);Didukung oleh
Inti: pada set latih, lebih sedikit orang yang selamat daripada yang tidak. Mari kita bangun model pertama yang memprediksi tidak ada yang selamat.
Ini model yang buruk karena Anda tahu ada yang selamat. Namun ini memberi baseline: model apa pun yang kita bangun nanti harus lebih baik dari ini.
Anda dapat melakukannya dengan langkah-langkah berikut:
Buat kolom 'Survived' untuk df_test yang mengodekan 'tidak selamat' untuk semua baris;
Simpan kolom 'PassengerId' dan 'Survived' dari df_test ke .csv dan kirimkan ke Kaggle.
df_test['Survived']=0
df_test[['PassengerId','Survived']].to_csv('data/predictions/no_survivors.csv', index=False)Didukung oleh
Akurasi berapa yang Anda dapatkan? Akurasi di Kaggle adalah 62,7.
Tidak terlalu buruk!
Catatan penting! Anda juga ingin menggunakan metrik selain akurasi!
EDA pada Variabel Fitur
Setelah Anda membuat model cepat-ala-kadarnya, saatnya mengulangi: mari lakukan lebih banyak Exploratory Data Analysis dan segera bangun model lain!
Anda dapat menggunakan seaborn untuk membuat bar plot fitur dataset Titanic 'Sex' (dari df_train).
74% perempuan selamat, sedangkan 19% laki-laki selamat.
Sekarang mari bangun model kedua dan prediksi bahwa semua perempuan selamat dan semua laki-laki tidak. Sekali lagi, ini model yang tidak realistis, tetapi akan memberikan baseline untuk membandingkan model berikutnya.
Buat kolom 'Survived' untuk df_test yang mengodekan prediksi di atas.
Simpan kolom 'PassengerId' dan 'Survived' dari df_test ke .csv dan kirimkan ke Kaggle.
df_test['Survived']= df_test.Sex =='female'
df_test['Survived']= df_test.Survived.apply(lambda x:int(x))
df_test.head()Didukung oleh
PassengerId
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
Survived
0
892
3
Kelly, Mr. James
male
34.5
0
0
330911
7.8292
NaN
Q
0
1
893
3
Wilkes, Mrs. James (Ellen Needs)
female
47.0
1
0
363272
7.0000
NaN
S
1
2
894
2
Myles, Mr. Thomas Francis
male
62.0
0
0
240276
9.6875
NaN
Q
0
3
895
3
Wirz, Mr. Albert
male
27.0
0
0
315154
8.6625
NaN
S
0
4
896
3
Hirvonen, Mrs. Alexander (Helga E Lindqvist)
female
22.0
1
1
3101298
12.2875
NaN
S
1
df_test[['PassengerId','Survived']].to_csv('../data/predictions/women_survive.csv', index=False)Didukung oleh
Nah, akurasi berapa yang diberikan model ini saat Anda mengirimkannya ke Kaggle?
Akurasi di Kaggle adalah 76,6%:
Dengan submission ini, Anda naik sekitar 2.000 peringkat di leaderboard! Selain itu, skor Anda meningkat, jadi kerja Anda sangat bagus!
Jelajahi Data Anda Lebih Jauh!
Gunakan seaborn untuk membuat bar plot fitur dataset Titanic 'Survived' yang dibagi (di-facet) menurut fitur 'Pclass'.
sns.factorplot(x='Survived', col='Pclass', kind='count', data=df_train);Didukung oleh
Inti: Penumpang kelas satu lebih mungkin selamat. Sebaliknya, penumpang kelas tiga lebih tidak mungkin selamat.
Gunakan seaborn untuk membuat bar plot fitur dataset Titanic 'Survived' yang dibagi (di-facet) menurut fitur 'Embarked'.
sns.factorplot(x='Survived', col='Embarked', kind='count', data=df_train);Didukung oleh
Inti: Penumpang yang berangkat dari Southampton lebih kecil kemungkinannya untuk selamat.
EDA dengan Variabel Numerik
Gunakan seaborn untuk membuat histogram kolom 'Fare' dari df_train.
sns.distplot(df_train.Fare, kde=False);Didukung oleh
Inti: Sebagian besar penumpang membayar kurang dari 100 untuk bepergian dengan Titanic.
Gunakan metode plotting pandas untuk memplot kolom 'Fare' untuk tiap nilai 'Survived' pada plot yang sama.
df_train.groupby('Survived').Fare.hist(alpha=0.6);Didukung oleh
Inti: Tampaknya mereka yang membayar lebih memiliki peluang bertahan hidup yang lebih tinggi.
Gunakan seaborn untuk membuat histogram kolom 'Age' dari df_train. Anda perlu menghapus nilai null sebelum melakukannya.
df_train_drop = df_train.dropna()
sns.distplot(df_train_drop.Age, kde=False);Didukung oleh
Plotkan strip plot & swarm plot dari 'Fare' dengan 'Survived' pada sumbu x.
sns.stripplot(x='Survived', y='Fare', data=df_train, alpha=0.3, jitter=True);Didukung oleh
sns.swarmplot(x='Survived', y='Fare', data=df_train);Didukung oleh
Inti: Tarif jelas tampak berkorelasi dengan kelangsungan hidup di Titanic.
Gunakan metode DataFrame .describe() untuk memeriksa statistik ringkas 'Fare' sebagai fungsi dari kelangsungan hidup.
df_train.groupby('Survived').Fare.describe()Didukung oleh
count
mean
std
min
25%
50%
75%
max
Survived
0
549.0
22.117887
31.388207
0.0
7.8542
10.5
26.0
263.0000
1
342.0
48.395408
66.596998
0.0
12.4750
26.0
57.0
512.3292
Gunakan seaborn untuk membuat scatter plot 'Age' terhadap 'Fare', diwarnai menurut 'Survived'.
sns.lmplot(x='Age', y='Fare', hue='Survived', data=df_train, fit_reg=False, scatter_kws={'alpha':0.5});Didukung oleh
Inti: Tampaknya mereka yang selamat entah membayar cukup mahal untuk tiketnya atau mereka masih muda.
Gunakan seaborn untuk membuat pairplot dari df_train, diwarnai menurut 'Survived'. Pairplot adalah cara yang bagus untuk menampilkan sebagian besar informasi yang sudah Anda temukan dalam satu kisi plot.
sns.pairplot(df_train_drop, hue='Survived');Didukung oleh
Dari EDA ke Model Machine Learning
Dalam tutorial ini, Anda telah berhasil:
memuat data kita dan meninjaunya.
menjelajahi variabel target secara visual dan membuat prediksi pertama Anda.
menjelajahi beberapa variabel fitur secara visual dan membuat lebih banyak prediksi yang lebih baik berdasarkan EDA kita.
melakukan EDA mendalam pada variabel fitur, kategorikal dan numerik.
Pada tulisan berikutnya, Anda akan meluangkan waktu untuk membangun beberapa model Machine Learning, berdasarkan apa yang Anda pelajari dari EDA di sini. Kita akan melakukannya pada tulisan berikutnya untuk proyek ini (akan diluncurkan pada 27 Desember).
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
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.
Awal bulan ini, saya melakukan Sesi Facebook Live Code Along di mana saya (dan semua yang ikut ngoding bersama) membangun beberapa algoritme dengan kompleksitas yang meningkat untuk memprediksi apakah penumpang tertentu di Titanic selamat atau tidak, berdasarkan data seperti tarif yang mereka bayar, pelabuhan keberangkatan, dan usia.
Pada tulisan ini, Anda akan meninjau beberapa hal yang kami bahas dalam sesi tersebut. Jika Anda ingin menonton ulang atau mengikuti tulisan ini bersama videonya, Anda bisa menontonnya di sini:
Khususnya, Anda mungkin masih ingat bahwa kita membangun model pembelajaran terawasi.
Pembelajaran terawasi adalah cabang Machine Learning (ML) yang memprediksi label, seperti 'Survived' atau 'Not'. Model semacam ini belajar dari data berlabel, yaitu data yang mencantumkan apakah seorang penumpang selamat (disebut "pelatihan model"), lalu membuat prediksi pada data tanpa label.
Di Kaggle, sebuah platform untuk pemodelan prediktif dan kompetisi analitik, ini disebut set latih dan uji karena
Kaggle kemudian memberi tahu Anda persentase jawaban benar: ini dikenal sebagai akurasi model Anda.
Cara Memulai dengan Pembelajaran Terawasi
Seperti yang mungkin sudah Anda ketahui, pendekatan yang baik untuk pembelajaran terawasi adalah sebagai berikut:
Dalam sesi code along ini, Anda telah atau akan melakukan semua langkah ini!
Catatan kami juga memiliki kursus yang membantu Anda mulai menggunakan machine learning untuk dataset Titanic dalam Python dan R.
Impor Data Anda dan Periksa
Langkah pertama selalu mengimpor data agar cepat memeriksa data yang akan Anda gunakan. Dalam kasus ini, Anda akan mengimpor paket
pandasdan menggunakan fungsiread_csv()untuk membaca data:Catatan bahwa pada potongan kode di bawah, paket lain dan modul dari paket seperti
matplotlib,sklearn, danseabornsudah diimpor. Anda akan menggunakannya lebih lanjut untuk visualisasi data (statistik) dan keperluan machine learning!Anda juga menggunakan perintah IPython magic
%matplotlib inlineagar plot muncul langsung di notebook. Anda juga menambahkansns.set()ke potongan kode untuk mengubah gaya visualisasi ke gaya dasar Seaborn:Tanpa berlama-lama, mari impor data dan ambil langkah pertama menelaah data Anda:
Jika Anda ingin melihat apa saja fitur-fiturnya, lihat dokumentasi data Kaggle di sini.
Sebelum melanjutkan, ada baiknya memperhatikan hal berikut terkait terminologi:
Dengan ini, Anda dapat lanjut menelaah data Anda, misalnya dengan fungsi
head()untuk menampilkan lima baris pertama dari set data Anda:Perhatikan bahwa DataFrame
df_testtidak memiliki kolom'Survived'karena inilah yang akan Anda prediksi!.info()untuk memeriksa tipe data, nilai hilang, dan lainnya (daridf_train).Dalam kasus ini, Anda melihat bahwa hanya ada 714 nilai non-null untuk kolom 'Age' pada DataFrame dengan 891 baris. Ini berarti ada 177 nilai null atau hilang.
.describe()untuk memeriksa statistik ringkas kolom numerik (daridf_train).Visual Exploratory Data Analysis (EDA) dan Model Pertama Anda
Sekarang Anda sudah punya gambaran tentang data dan telah melihat beberapa statistik, saatnya juga memvisualisasikan data Anda dengan bantuan paket
seaborn:seabornuntuk membuat bar plot dari kelangsungan hidup di Titanic, yang merupakan variabel target Anda.Inti: pada set latih, lebih sedikit orang yang selamat daripada yang tidak. Mari kita bangun model pertama yang memprediksi tidak ada yang selamat.
Ini model yang buruk karena Anda tahu ada yang selamat. Namun ini memberi baseline: model apa pun yang kita bangun nanti harus lebih baik dari ini.
Anda dapat melakukannya dengan langkah-langkah berikut:
'Survived'untukdf_testyang mengodekan 'tidak selamat' untuk semua baris;'PassengerId'dan'Survived'daridf_testke .csv dan kirimkan ke Kaggle.Akurasi berapa yang Anda dapatkan? Akurasi di Kaggle adalah 62,7.
Tidak terlalu buruk!
Catatan penting! Anda juga ingin menggunakan metrik selain akurasi!
EDA pada Variabel Fitur
Setelah Anda membuat model cepat-ala-kadarnya, saatnya mengulangi: mari lakukan lebih banyak Exploratory Data Analysis dan segera bangun model lain!
seabornuntuk membuat bar plot fitur dataset Titanic'Sex'(daridf_train).seabornuntuk membuat bar plot fitur dataset Titanic'Survived'yang dibagi (di-facet) menurut fitur'Sex'.Inti: Perempuan lebih mungkin selamat daripada laki-laki.
pandasuntuk menghitung berapa banyak perempuan dan berapa banyak laki-laki yang selamat:pandasuntuk mengetahui proporsi perempuan yang selamat, serta proporsi laki-laki:74% perempuan selamat, sedangkan 19% laki-laki selamat.
Sekarang mari bangun model kedua dan prediksi bahwa semua perempuan selamat dan semua laki-laki tidak. Sekali lagi, ini model yang tidak realistis, tetapi akan memberikan baseline untuk membandingkan model berikutnya.
'Survived'untukdf_testyang mengodekan prediksi di atas.'PassengerId'dan'Survived'daridf_testke .csv dan kirimkan ke Kaggle.Nah, akurasi berapa yang diberikan model ini saat Anda mengirimkannya ke Kaggle?
Akurasi di Kaggle adalah 76,6%:
Dengan submission ini, Anda naik sekitar 2.000 peringkat di leaderboard! Selain itu, skor Anda meningkat, jadi kerja Anda sangat bagus!
Jelajahi Data Anda Lebih Jauh!
seabornuntuk membuat bar plot fitur dataset Titanic'Survived'yang dibagi (di-facet) menurut fitur'Pclass'.Inti: Penumpang kelas satu lebih mungkin selamat. Sebaliknya, penumpang kelas tiga lebih tidak mungkin selamat.
seabornuntuk membuat bar plot fitur dataset Titanic'Survived'yang dibagi (di-facet) menurut fitur'Embarked'.Inti: Penumpang yang berangkat dari Southampton lebih kecil kemungkinannya untuk selamat.
EDA dengan Variabel Numerik
seabornuntuk membuat histogram kolom'Fare'daridf_train.Inti: Sebagian besar penumpang membayar kurang dari 100 untuk bepergian dengan Titanic.
pandasuntuk memplot kolom'Fare'untuk tiap nilai'Survived'pada plot yang sama.Inti: Tampaknya mereka yang membayar lebih memiliki peluang bertahan hidup yang lebih tinggi.
seabornuntuk membuat histogram kolom'Age'daridf_train. Anda perlu menghapus nilai null sebelum melakukannya.'Fare'dengan'Survived'pada sumbu x.Inti: Tarif jelas tampak berkorelasi dengan kelangsungan hidup di Titanic.
.describe()untuk memeriksa statistik ringkas'Fare'sebagai fungsi dari kelangsungan hidup.seabornuntuk membuat scatter plot'Age'terhadap'Fare', diwarnai menurut'Survived'.Inti: Tampaknya mereka yang selamat entah membayar cukup mahal untuk tiketnya atau mereka masih muda.
seabornuntuk membuat pairplot daridf_train, diwarnai menurut'Survived'. Pairplot adalah cara yang bagus untuk menampilkan sebagian besar informasi yang sudah Anda temukan dalam satu kisi plot.Dari EDA ke Model Machine Learning
Dalam tutorial ini, Anda telah berhasil:
Pada tulisan berikutnya, Anda akan meluangkan waktu untuk membangun beberapa model Machine Learning, berdasarkan apa yang Anda pelajari dari EDA di sini. Kita akan melakukannya pada tulisan berikutnya untuk proyek ini (akan diluncurkan pada 27 Desember).