Saya baru saja menyelesaikan minggu ketiga 'Machine Learning Zoomcamp 2022' oleh Alexei Grigorev, dan untuk membagikan catatan dan kemajuan saya, saya akan melakukannya melalui media ini. Artikel mingguan yang ditulis sebagai wawancara yang membahas topik-topik utama yang dipelajari dalam minggu itu, serta hal-hal umum lainnya dari kursus atau rekomendasi untuk tugas atau proyek, saya harap Anda menikmatinya, dan masukan apa pun akan diterima.

-Akhirnya kita telah mencapai minggu ketiga, betapa cepatnya waktu berlalu, tapi saya yakin itu tidak sia-sia berkat semua yang telah kita pelajari. Untuk minggu baru ini kami menangani proyek Machine Learning baru yang berfokus pada algoritme berbeda. Bisakah Anda memperkenalkan masalah minggu ini?

Proyek minggu ini menempatkan kami sebagai karyawan sebuah perusahaan telekomunikasi di mana kami sering dihadapkan pada skenario di mana pelanggan kami tidak lagi puas dengan layanan kami atau telah menemukan penawaran yang lebih baik dari pesaing kami.

Prihatin dengan hal ini, perusahaan menetapkan tujuan mendesak untuk mencegah orang meninggalkan layanan kami, mengkhawatirkan tingkat churn, untuk ini, Anda mengusulkan alternatif di mana setiap pelanggan diberi nilai antara 0 dan 1, yang memberi tahu kita seberapa besar kemungkinan pelanggan ini akan keluar dari perusahaan kita, menjadi 0 untuk tetap bersama kita dan 1 untuk pasti akan pergi.

Idenya adalah, jika pelanggan memiliki kemungkinan besar untuk meninggalkan, kami mengiriminya email berisi insentif (paket promosi atau diskon) yang mencegah pelanggan tersebut untuk meninggalkan. Anda mengklarifikasi bahwa label ini harus sangat tepat karena jika kami mengirimkan insentif kepada orang-orang dengan kemungkinan pengabaian yang rendah, perusahaan pasti akan berhenti menerima uang dan jika kami tidak mengirimkan email kepada mereka yang memiliki kemungkinan pengabaian yang tinggi, kami akan melakukannya tidak melakukan apa pun untuk mencegah pelanggan itu pergi.

Tentu saja, kita dapat menggunakan Machine Learning untuk mengatasi situasi ini, dan cukup dengan mengingat kembali dan melanjutkan ke minggu 1 untuk mengingat salah satu algoritma Supervised Machine Learning yang mana kita berupaya untuk memprediksi < kategori kuat> dan jika kita hanya memiliki dua kemungkinan kategori, seperti dalam kasus kita (putus sekolah atau tidak putus sekolah), kita akan menghadapi masalah Klasifikasi Biner.

Untuk melatih model kami dan kemudian membuat prediksi, kami memiliki informasi historis pelanggan kami dengan informasi demografis, jenis layanan apa yang mereka miliki, jenis kontrak, antara karakteristik lain yang akan menjadi masukan untuk model kami, dan variabel target yang akan digunakan. diberi label dengan 0 atau 1, karena ini analog dengan nilai positif atau negatif, yang juga dapat dipahami sebagai keadaan ada atau tidak ada, mengikuti contoh kita, 1 atau positif berhubungan dengan kiri klien, yaitu fakta keluarnya hadir, sedangkan 0 atau negatif berhubungan dengan klien tetap, yaitu fakta keluar tidak ada.

Singkatnya, tujuan kami minggu ini adalah membangun model klasifikasi biner dengan informasi historis pelanggan perusahaan telekomunikasi dan memberi mereka skor yang mewakili kemungkinan churn.

-Untuk minggu ini, di mana saya dapat menemukan data yang akan kami gunakan untuk mengembangkan proyek?

Kumpulan data untuk proyek ini dapat ditemukan di situs web Kaggle () atau diunduh dari repositori sebagai file .csv (

Churn adalah variabel target kami dan informasi tentang jenis layanan yang dimiliki pelanggan kami, informasi akun, dan informasi demografis akan menjadi matriks Fitur kami.

-Salah satu kelemahan yang kami temukan adalah variabel target 'churn' bukannya memiliki nilai biner (0 atau 1) seperti yang didefinisikan dalam pendekatan analitis, melainkan memiliki nilai tipe 'objek' di Pandas dengan 'ya' atau 'tidak ' nilai, bagaimana ini dapat diubah menjadi kolom biner?

Hal ini dapat dilakukan di Pandas dengan baris kode berikut:

df.churn = (df.churn == ‘yes’).astype(int)

Ide di balik ini adalah dengan menggunakan mask yang memfilter hanya nilai yang berisi 'yes' pada rangkaian variabel 'churn', dengan cara ini rangkaian Boolean dibuat yang akan memiliki True jika nilainya 'ya' dan Salah jika 'tidak'. Setelah ini, berkat pengkodean internal Boolean dengan Python, ini dapat diubah menjadi bilangan bulat, untuk ini, kita akan menggunakan .astype(int), di mana nol akan ditetapkan ke False dan satu ke True , dengan cara ini kita akan memperoleh deret biner baru.

-Dalam minggu kedua kami diajari cara membangun kerangka validasi menggunakan Numpy dan Pandas, untuk minggu ini semuanya disederhanakan karena perpustakaan Scikit-Learn ikut serta, bagaimana hal itu dapat membantu kami mendapatkan pelatihan, validasi, dan menguji kumpulan data?

Pustaka ini memiliki modul yang disebut model_selection dan modul ini, sebuah fungsi yang disebut train_test_split, yang akan bertanggung jawab untuk membagi kumpulan data menjadi dua, satu yang sesuai dengan Kereta dan yang lainnya untuk Pengujian, untuk ini, diperlukan argumen dari kumpulan data yang akan dipisahkan dan ukuran kumpulan data baru, berkat parameter test_size atau train_size.

Masalahnya adalah dalam kerangka validasi kami, kami telah menyiapkan kebutuhan untuk memiliki tiga kumpulan data, dan kumpulan data validasi tersebut akan hilang. Jadi, yang bisa kita lakukan adalah membagi lagi salah satu dari dua himpunan tersebut dengan fungsi yang sama dan memperoleh himpunan ketiga, mari kita lihat dalam kode:

Misalkan kita membagi kumpulan data ke dalam proporsi berikut:

  • Kumpulan Data Kereta: 60% (0,6)
  • Kumpulan Data Validasi : 20% (0,2)
  • Kumpulan Data Uji:20% (0,2)
from sklearn.model_selection import train_test_split
df_full_train, df_test = train_test_split(df, test_size = 0.2, random_state = 1) # use random_state to replicate the code

Sekarang kita memiliki dua Dataframe, yang satu kita sebut df_full_train yang menampung 80% data kita, dan yang lainnya df_test yang menampung 20%. Yang masih harus dilakukan adalah membagi salah satu kumpulan data ini untuk mendapatkan kumpulan data lainnya. Pilihan yang jelas adalah df_full_train untuk mendapatkan proporsi yang telah ditentukan sebelumnya. Yang harus kita perhatikan adalah untuk ukuran dataset yang baru, kita harus ingat bahwa kita tidak lagi memiliki 100% datanya, kita hanya memiliki 80%, jika kita ingin mendapatkan 20% dari 80% itu maka akan sesuai. hingga 25% (20/80 = ¼ = 0,25).

df_train, df_val = train_test_split(df_full_train, test_size = 0.25, random_state = 1)

Ingatlah bahwa Anda selalu dapat mengonfirmasi ukuran kumpulan data dengan fungsi len().

len(df_train), len(df_val), len(df_test)

-Saat menjelajahi variabel Target, kami melihat proporsi masing-masing kategori, mengapa hal ini berguna?

Pada minggu-minggu sebelumnya kami telah menekankan pentingnya kualitas data yang digunakan untuk melatih model Machine Learning, dan sama seperti distribusi yang bias mempengaruhi model, disproporsi yang besar antar kelas dalam model klasifikasi biner dapat menyebabkan hasil yang tidak diharapkan. Masalah ini dikenal sebagai Data yang tidak seimbang, karena sebagian besar data di salah satu kelas dan sedikit partisipasi di kelas lainnya, banyak teknik yang dapat digunakan untuk menyelesaikan masalah ini, ada yang sepele seperti pengurangan secara acak jumlah sampel dari kelas mayoritas, atau secara acak menggandakan jumlah sampel dari kelas minoritas, atau menggunakan teknik yang jauh lebih maju seperti Teknik Pengambilan Sampel Minoritas Sintetis (SMOTE) yang juga bertanggung jawab untuk menghasilkan kelas secara seimbang.

Salah satu cara di Pandas untuk mengetahui apakah Variabel Target kita dalam model klasifikasi biner tidak seimbang antar kelas adalah dengan menemukan mean data dan ini akan menjadi proporsi kelas positif, untuk proyek kami, proporsi kelas yang mengabaikan melayani. Dan ini dimungkinkan karena, sebagai variabel biner, hanya mungkin untuk mengambil dua nilai (1 dan 0). Jadi, satu menunjukkan kelas positif, dan nilai dalam rumus mean ini akan dijumlahkan, sedangkan nol hanya menambah ukuran sampel, tetapi tanpa mengubah nilai penjumlahan.

-Di bagian 3.5 Pentingnya fitur: Tingkat churn dan rasio risiko, kita memiliki pendekatan pertama tentang cara menemukan pentingnya beberapa variabel dibandingkan variabel lainnya, dapatkah Anda menjelaskan metrik yang terlihat dalam pelajaran ini?

Ketika dihadapkan dengan kumpulan data yang besar dan lusinan variabel, kita mungkin merasa kewalahan dan bertanya-tanya apakah semua informasi ini berguna untuk model kita atau variabel mana yang harus menarik perhatian kita dan apakah variabel tersebut penting untuk proyek kita. Oleh karena itu, kita harus jelas bahwa teknik Pembelajaran Mesin ini ingin memprediksi sesuatu dari hal lain, sesederhana itu, tetapi untuk melakukannya, teknik ini mencari pola yang tidak terlihat dan menemukan hubungan yang ada antara fitur dan variabel target.

Dalam bab ini disebutkan dua metrik yang sangat berguna untuk mengetahui apakah terdapat perbedaan signifikan antara pengaruh yang dihasilkan oleh masing-masing Fitur dan kategorinya dengan variabel respons, yaitu:

  • Nilai Kelas Positif: Metrik ini adalah selisih antara rata-rata variabel target (proporsi kelas positif) dan rata-rata setiap kategori pada beberapa Fitur. Jika perbedaan ini negatif atau kurang dari nol, maka kemungkinan besar untuk kategori Fitur tersebut kelas positif terpenuhi, dalam kasus kami, semakin banyak yang putus sekolah. Di sisi lain, jika positif atau lebih besar dari nol, kecil kemungkinannya kelas positif akan lebih banyak muncul pada kategori Fitur tersebut, dan lebih sedikit orang yang keluar.
  • Rasio Risiko: Metrik ini menjelaskan rasio antara rata-rata setiap kategori beberapa Fitur dan rata-rata variabel target. Jika rasio ini lebih besar dari satu, maka kelas positif kemungkinan besar akan terpenuhi untuk kategori Fitur tersebut. Sedangkan jika kurang dari 1, kecil kemungkinan terpenuhinya kelas positif untuk kategori Fitur tersebut.

Sekarang, metrik ini menetapkan hubungan antara Fitur dan variabel respons, tetapi juga besarnya nilainya memungkinkan saya memahami tingkat pengaruh beberapa kategori pada suatu variabel terhadap variabel lain, jika dalam tingkat kelas positif perbedaannya adalah lebih besar, maka memang terdapat beberapa perbedaan atau hubungan yang signifikan antara kategori fitur tersebut yang membuat saya berpikir bahwa jika kategori tersebut terpenuhi maka kemungkinan besar kelas positif saya akan muncul.

Dengan cara yang sama, rasio risiko juga memungkinkan kita untuk memahami pentingnya masing-masing Fitur secara relatif, di sini kita mengasosiasikan pentingnya dengan beberapa perbedaan signifikan atau fakta bahwa suatu Fitur terkait dengan atau menjelaskan variabel respons.

Metrik penting lainnya yang menunjukkan pentingnya Fitur adalah Informasi Saling Menguntungkan, yang didasarkan pada teori informasi dan memberi tahu kita seberapa banyak yang kita ketahui tentang suatu variabel jika kita melihat dan mengetahui nilai variabel lain. Saat melakukan analisis, kami mencari nilai relatif dari masing-masing fitur dan kemudian mengatur urutannya berdasarkan nilai tertinggi, fitur yang berada di peringkat teratas (nilai tertinggi) akan menyimpan informasi yang lebih signifikan untuk memprediksi nilai. Variabel Target kami.

-Metrik yang Anda sebutkan ini Saya memahami bahwa metrik tersebut berfungsi untuk mengukur pentingnya Fitur kategorikal, namun bagaimana dengan metrik numerik, metrik apa yang dapat digunakan?

Untuk mengukur pentingnya Fitur numerik kita dapat menggunakan koefisien korelasi Pearson, yang merupakan cara untuk mengukur derajat ketergantungan antara dua variabel.

Ini adalah metrik yang mengambil nilai antara -1 dan satu yang menggambarkan derajat hubungan jika nilainya negatif merespons hubungan terbalik antara dua variabel jika yang satu tumbuh maka yang lain menurun, dan sebaliknya jika yang satu menurun maka yang lain tumbuh.

Jika nilainya positif maka berespon hubungan searah, jika variabel yang satu meningkat maka variabel yang lain juga akan meningkat, jika yang satu menurun maka variabel lainnya juga akan menurun. Jika nilainya nol, maka dapat dipahami bahwa perubahan pada salah satu variabel tidak mempengaruhi atau menghasilkan perubahan apa pun pada variabel lainnya.

Sama seperti tanda koefisien korelasi yang merupakan indikator yang baik mengenai tingkat hubungan antara dua variabel, begitu pula ukurannya, sedemikian rupa sehingga kita dapat mengklasifikasikan seberapa bergantungnya variabel tersebut:

  • Jika nilai koefisien hubungan antara [-0,2–0] atau [0–0,2] kita menghadapi ketergantungan rendah, sehingga sangat jarang terjadi perubahan dalam satu variabel mempengaruhi variabel lainnya.
  • Jika nilai koefisien hubungan antara [-0,5–0,2] atau [0,2–0,5] kita menghadapi ketergantungan sedang, sehingga perubahan dalam satu variabel kadang-kadang dijelaskan oleh perubahan yang lain.
  • Jika nilai koefisien hubungan antara [-1,0–0,5] atau [0,5–1,0] kita berhadapan dengan ketergantungan yang kuat, sehingga perubahan dalam satu variabel hampir selalu atau selalu dijelaskan oleh perubahan yang lain.

Apa itu One-Hot Encoding dan seberapa bermanfaatnya?

Ini adalah metode untuk menyandikan variabel kategori dalam nilai numerik, ingat bahwa model Pembelajaran Mesin bekerja dengan nilai numerik sehingga dapat menjadi alternatif yang sesuai untuk menyertakan fitur kategorikal dalam model kami.

Apa yang dilakukannya adalah membuat kolom baru untuk setiap kategori yang ada dalam variabel dan mengisinya dengan nilai 1 atau 0, yang sesuai dengan ada atau tidaknya kategori tersebut untuk setiap catatan, yaitu di masing-masing catatan. baris hanya akan ada satu dan yang lainnya akan menjadi nol.

Konsep ini juga ada dalam rangkaian elektronik dan digital dimana mungkin kita dapat menemukan penyebab dari namanya, mengasosiasikan nilai satu sebagai sambungan panas dan nol sebagai sambungan dingin, hanya sebagai fakta yang aneh, ini bukanlah tujuan dari kursus ini.

Apa perbedaan antara model regresi linier dan model regresi logistik?

Pertama, kita harus memahami bahwa keduanya merupakan model linier, yang memiliki beberapa properti yang membuatnya lebih cepat, lebih mudah untuk dilatih, dan diinterpretasikan. Ingat saja rumus regresi linier yang terlihat minggu lalu di mana istilah kesalahan dipertimbangkan dan jumlah bobot dari bobot dengan Fitur, dan pembobotan ini adalah jenis perkalian matriks perkalian titik, yang dalam aljabar linier adalah operator linier.

Regresi logistik juga berfungsi dalam hal ini, namun, kita harus ingat bahwa kita berurusan dengan tugas klasifikasi biner, kita tidak memerlukan rentang nilai numerik yang berkelanjutan (-inf, +inf), tetapi a nilai antara 0 dan 1. Untuk itu regresi logistik menerapkan fungsi sigmoid yang ditandai dengan mengembalikan nilai antara 0 dan 1, jika mendapat nilai 0 maka mengembalikan 0,5, jika mendapat nilai positif maka akan mendekati 1 dan jika negatif maka akan mendekati 0, tidak pernah melebihi batas tersebut. Fungsi sigmoid ini diterapkan pada jumlah fitur tertimbang ini dan akan menghasilkan nilai antara 0 dan 1 yang mewakili probabilitas untuk masuk dalam kelas positif.

Instruktur membuktikan perbedaan saat membuat prediksi, dia membedakan antara prediksi keras dan prediksi lunak, apa perbedaannya?

Keduanya berbeda dalam nilai kembalian yang dihasilkan model saat membuat prediksi, untuk prediksi keras, model akan mengembalikan nilai biner yang mewakili label kelas untuk rekaman tersebut dan di Scikit-Learn digunakan dengan fungsi prediksi(). Untuk prediksi lunak, ini mengembalikan nilai antara 0 dan 1 yang mewakili probabilitas kemunculan kelas positif dan di Scikit-Learn fungsi prediksi_proba() digunakan .

-Dan yang terakhir, bagaimana saya bisa mendapatkan akses ke Machine Learning Zoomcamp 2022?

Segala informasi terkait dapat dilihat pada tautan berikut:



Atau di jejaring sosial Alexei Grigorev:

  • LinkedIn:

https://www.linkedin.com/in/agrigorev/

  • Twitter:

https://twitter.com/Al_Grigor?s=20&t=0GubFiiB8kfJkQPPGqaaCg