Latihan - Membangun Model Pembelajaran Mesin

Selesai

Untuk membuat model pembelajaran mesin, Anda memerlukan dua himpunan data: satu untuk pelatihan dan satu untuk pengujian. Dalam praktiknya, Anda sering kali hanya memiliki satu himpunan data, sehingga Anda membaginya menjadi dua. Dalam latihan ini, Anda akan melakukan pemisahan 80-20 pada DataFrame yang Anda siapkan di lab sebelumnya sehingga Anda dapat menggunakannya untuk melatih model pembelajaran mesin. Anda juga akan memisahkan DataFrame menjadi kolom fitur dan kolom label. Yang pertama berisi kolom yang digunakan sebagai input ke model (misalnya, asal dan tujuan penerbangan serta waktu keberangkatan yang dijadwalkan), sedangkan yang terakhir berisi kolom yang model akan coba prediksi — dalam hal ini, kolom ARR_DEL15, yang menunjukkan apakah penerbangan akan tiba tepat waktu.

  1. Beralih kembali ke buku catatan Azure yang Anda buat di bagian sebelumnya. Jika Anda menutup buku catatan, Anda bisa masuk kembali ke portal Microsoft Azure Notebooks, membuka buku catatan Anda, dan menggunakan Sel ->Jalankan Semua untuk menjalankan ulang semua sel dalam buku catatan setelah membukanya.

  2. Di sel baru di akhir buku catatan, masukkan dan jalankan pernyataan berikut:

    from sklearn.model_selection import train_test_split
    train_x, test_x, train_y, test_y = train_test_split(df.drop('ARR_DEL15', axis=1), df['ARR_DEL15'], test_size=0.2, random_state=42)
    

    Pernyataan pertama mengimpor fungsi pembantu train_test_split. Baris kedua menggunakan fungsi untuk membagi DataFrame menjadi set pelatihan yang berisi 80% dari data asli, dan set pengujian yang berisi 20% sisanya. Parameter random_state menambahkan generator angka acak yang digunakan untuk melakukan pemisahan. Sementara parameter pertama dan kedua adalah DataFrames yang berisi kolom fitur dan kolom label.

  3. train_test_split mengembalikan empat DataFrames. Gunakan perintah berikut untuk menampilkan jumlah baris dan kolom dalam DataFrame yang berisi kolom fitur yang digunakan untuk pelatihan:

    train_x.shape
    
  4. Sekarang gunakan perintah ini untuk menampilkan jumlah baris dan kolom dalam DataFrame yang berisi kolom fitur yang digunakan untuk pengujian:

    test_x.shape
    

    Bagaimana kedua output berbeda, dan mengapa?

Dapatkah Anda memprediksi hal yang akan Anda lihat jika memanggil shape pada dua DataFrames lainnya, train_y dan test_y? Jika Anda tidak yakin, cobalah dan cari tahu.

Ada banyak jenis model pembelajaran mesin. Salah satu yang paling umum adalah model regresi, yang menggunakan salah satu dari sejumlah algoritma regresi untuk menghasilkan nilai numerik — misalnya, usia seseorang atau kemungkinan bahwa transaksi kartu kredit adalah penipuan. Anda akan melatih model klasifikasi, yang berusaha menyelesaikan serangkaian input ke dalam salah satu set output yang diketahui. Salah satu contoh klasik model klasifikasi adalah contoh yang memeriksa email dan mengklasifikasikannya sebagai "spam" atau "bukan spam". Model Anda akan menjadi model klasifikasi biner yang memprediksi apakah penerbangan akan tiba tepat waktu atau terlambat ("biner" karena hanya ada dua kemungkinan output).

Salah satu manfaat menggunakan scikit-learn adalah Anda tidak perlu membangun model ini — atau mengimplementasikan algoritma yang digunakannya — secara manual. Scikit-learn mencakup berbagai kelas untuk menerapkan model pembelajaran mesin umum. Salah satunya adalah RandomForestClassifier, yang menyesuaikan beberapa pohon keputusan dengan data dan menggunakan rata-rata untuk meningkatkan akurasi keseluruhan dan membatasi overfitting.

  1. Jalankan kode berikut di sel baru untuk membuat objek RandomForestClassifier dan melatihnya dengan memanggil metode yang pas.

    from sklearn.ensemble import RandomForestClassifier
    
    model = RandomForestClassifier(random_state=13)
    model.fit(train_x, train_y)
    

    Output menunjukkan parameter yang digunakan dalam pengklasifikasi, termasuk n_estimators, yang menentukan jumlah pohon di setiap hutan pohon keputusan, dan max_depth, yang menentukan kedalaman maksimum pohon keputusan. Nilai yang ditampilkan adalah default, tetapi Anda dapat mengambil alih salah satunya saat membuat objek RandomForestClassifier.

    Training the model.

    Melatih model

  2. Sekarang panggil metode prediksi untuk menguji model menggunakan nilai di test_x, diikuti dengan metode skor untuk menentukan akurasi rata-rata model:

    predicted = model.predict(test_x)
    model.score(test_x, test_y)
    

    Konfirmasikan bahwa Anda melihat output berikut:

    Testing the model.

    Menguji model

Akurasi rata-rata adalah 86%, yang tampaknya baik di permukaan. Namun, akurasi rata-rata tidak selalu menjadi indikator akurasi model klasifikasi yang dapat diandalkan. Mari kita pelajari lebih lanjut dan menentukan seberapa akurat model sebenarnya — yaitu, seberapa cakap model dalam menentukan apakah penerbangan akan tiba tepat waktu.

Ada beberapa cara untuk mengukur akurasi model klasifikasi. Salah satu langkah terbaik secara keseluruhan untuk model klasifikasi biner adalah Area Di Bawah Kurva karakteristik Operasi Penerima (terkadang disebut sebagai "ROC AUC"), yang pada dasarnya mengukur seberapa sering model akan membuat prediksi yang benar terlepas dari hasilnya. Dalam pelajaran ini, Anda akan menghitung skor ROC AUC untuk model yang Anda bangun sebelumnya dan mempelajari beberapa alasan mengapa skor itu lebih rendah dari output akurasi rata-rata dengan metode score. Anda juga akan mempelajari cara lain untuk mengukur akurasi model.

  1. Sebelum menghitung ROC AUC, Anda harus menghasilkan probabilitas prediksi untuk set pengujian. Probabilitas ini adalah perkiraan untuk masing-masing kelas, atau jawaban, model dapat memprediksi. Misalnya, [0.88199435, 0.11800565] berarti ada kemungkinan 89% penerbangan akan tiba tepat waktu (ARR_DEL15 = 0) dan 12% kemungkinan tidak akan tiba tepat waktu (ARR_DEL15 = 1). Jumlah dari dua probabilitas adalah 100%.

    Jalankan kode berikut untuk menghasilkan serangkaian probabilitas prediksi dari data pengujian:

    from sklearn.metrics import roc_auc_score
    probabilities = model.predict_proba(test_x)
    
  2. Sekarang gunakan pernyataan berikut untuk menghasilkan skor ROC AUC dari probabilitas menggunakan metode roc_auc_score scikit-learn:

    roc_auc_score(test_y, probabilities[:, 1])
    

    Konfirmasikan bahwa output menunjukkan skor 67%:

    Generating an AUC score.

    Menghasilkan skor AUC

    Mengapa skor AUC lebih rendah dari akurasi rata-rata yang dihitung dalam latihan sebelumnya?

    Output dari metode score mencerminkan berapa banyak item dalam set pengujian yang diprediksi dengan benar. Skor ini dimiringkan oleh fakta bahwa dataset model yang dilatih dan diuji berisi lebih banyak baris yang mewakili kedatangan tepat waktu daripada baris yang mewakili kedatangan terlambat. Karena ketidakseimbangan data ini, Anda kemungkinan lebih benar jika memprediksi bahwa penerbangan akan tepat waktu daripada memprediksi bahwa penerbangan akan terlambat.

    ROC AUC memperhitungkan hal ini dan memberikan indikasi yang lebih akurat tentang seberapa besar kemungkinan prediksi tepat waktu atau terlambat akan benar.

  3. Anda dapat mempelajari lebih lanjut perilaku model dengan menghasilkan matriks konfusi, juga dikenal sebagai matriks kesalahan. Matriks konfusi mengukur berapa kali setiap jawaban diklasifikasikan dengan benar atau salah. Secara khusus, matriks ini mengukur jumlah positif palsu, negatif palsu, positif benar, dan negatif benar. Hal ini penting, karena jika model klasifikasi biner yang dilatih untuk mengenali kucing dan anjing diuji dengan himpunan data 95% anjing, model dapat menghasilkan skor 95% hanya dengan menebak "anjing" setiap saat. Tetapi jika gagal mengidentifikasi kucing, hasil skornya akan kecil.

    Gunakan kode berikut untuk menghasilkan matriks konfusi untuk model Anda:

    from sklearn.metrics import confusion_matrix
    confusion_matrix(test_y, predicted)
    

    Baris pertama dalam output mewakili penerbangan yang tepat waktu. Kolom pertama pada baris tersebut menunjukkan berapa banyak penerbangan yang diprediksi tepat waktu dengan benar, sedangkan kolom kedua menunjukkan berapa banyak penerbangan yang diprediksi tertunda tetapi ternyata tidak. Dari ini, model tampaknya mahir memprediksi bahwa penerbangan akan tepat waktu.

    Generating a confusion matrix.

    Menghasilkan matriks konfusi

    Tetapi lihat baris kedua, yang mewakili penerbangan yang tertunda. Kolom pertama menunjukkan berapa banyak penerbangan yang tertunda yang salah diprediksi tepat waktu. Kolom kedua menunjukkan berapa banyak penerbangan yang diprediksi tertunda dengan benar. Jelas, model ini hampir tidak mahir dalam memprediksi bahwa penerbangan akan tertunda seperti dalam memprediksi bahwa penerbangan akan tiba tepat waktu. Hal yang Anda inginkan dalam matriks konfusi adalah angka besar di sudut kiri atas dan kanan bawah, dan angka kecil (sebaiknya nol) di sudut kanan atas dan kiri bawah.

  4. Langkah-langkah akurasi lain untuk model klasifikasi termasuk presisi dan pengenalan. Misalkan model disajikan dengan tiga kedatangan tepat waktu dan tiga kedatangan yang tertunda, dan bahwa model tersebut memprediksi dua kedatangan tepat waktu dengan benar, tetapi salah memprediksi bahwa dua kedatangan yang tertunda akan tepat waktu. Dalam hal ini, presisinya adalah 50% (dua dari empat penerbangan yang diklasifikasikannya tepat waktu sebenarnya tepat waktu), sementara pengenalannya adalah 67% (ini mengidentifikasi dua dari tiga kedatangan tepat waktu dengan benar). Anda dapat mempelajari presisi dan pengenalan lebih lanjut dari https://en.wikipedia.org/wiki/Precision_and_recall

    Scikit-learn berisi metode praktis bernama precision_score untuk menghitung presisi. Untuk mengukur presisi model Anda, jalankan pernyataan berikut:

    from sklearn.metrics import precision_score
    
    train_predictions = model.predict(train_x)
    precision_score(train_y, train_predictions)
    

    Memeriksa output. Apa presisi model Anda?

    Measuring precision.

    Mengukur presisi

  5. Scikit-learn juga berisi metode bernama recall_score untuk menghitung pengenalan. Untuk mengukur pengenalan model Anda, jalankan pernyataan berikut:

    from sklearn.metrics import recall_score
    
    recall_score(train_y, train_predictions)
    

    Apa itu pengenalan model?

    Measuring recall.

    Mengukur pengenalan

  6. Gunakan perintah File ->Simpan dan Titik Pemeriksaan untuk menyimpan buku catatan.

Di dunia nyata, seorang ilmuwan data terlatih akan mencari cara untuk membuat model lebih akurat. Selain itu, mereka akan mencoba algoritma yang berbeda dan mengambil langkah untuk menyesuaikan algoritma yang dipilih guna menemukan kombinasi parameter yang optimal. Langkah kemungkinan lainnya adalah memperluas himpunan data ke jutaan baris daripada beberapa ribu dan juga mencoba mengurangi ketidakseimbangan antara kedatangan terlambat dan tepat waktu. Tetapi untuk tujuan kita, modelnya baik-baik saja apa adanya.