Churn Pelanggan Menggunakan PySpark

Prediksi untuk Aplikasi Musik.

Ulasan Proyek

Sparkify adalah Aplikasi untuk Musik. Kumpulan data ini mencakup log aktivitas pengguna sparkify selama dua bulan. Log mencakup beberapa informasi dasar pengguna, dan informasi tentang operasinya. Seorang konsumen dapat memiliki beberapa entri di dalamnya. Saya mengubah sebagian pengguna dalam hasil, melalui pembatalan akun. Saya mengunggah informasi penelitian saya ke repositori GitHub.

Temukan kode GitHub di sini:

Apa yang akan Anda ketahui?

Tujuan utama artikel ini adalah untuk mendemonstrasikan antarmuka SQL yang ditawarkan PySpark dan kemampuan Pembelajaran Mesinnya. Di sini, kami berupaya menunjukkan bahwa jika Anda sudah mengetahui SQL dan pustaka scikit-learn, Anda dapat dengan mudah memperluas analisis Machine Learning ke kumpulan data yang lebih besar (yaitu kumpulan data yang tidak sesuai dengan memori satu mesin).

Pernyataan masalah

Tugas proyek ini adalah mengidentifikasi karakteristik pengguna yang keluar dari data perilaku pengguna tersebut, dan mengambil tindakan untuk mempertahankan pengguna yang hilang di masa mendatang sesegera mungkin. Kesulitan proyek ini adalah data yang diserahkan ke model pelatihan harus berupa satu item untuk setiap orang.

Karena data kita adalah data perilaku, kita perlu memperoleh karakteristik pengguna dari data perilaku dan kemudian menyerahkannya ke model pelatihan untuk mendapatkan hasilnya. Ini akan menghasilkan fitur-fitur ini dari analisis data eksplorasi dan rekayasa fitur. Jika hasilnya buruk, proses mungkin akan diulang berkali-kali hingga model berkinerja baik.

Mari kita luncurkan Spark Session dan memuatnya ke Jupyter Work Space Notebook.

Di bawah ini adalah kode yang saya gunakan untuk membuat sesi percikan berbasis lokal.

Saya menggunakan kode berikut untuk memuat data dari file json menggunakan percikan.

Pra-pemrosesan Data

Data perilaku berbeda dengan data pelatihan akhir, jadi kita perlu membersihkan nilai-nilai yang tidak ada dalam pikiran kita. Jika userId dan sessionId adalah null, maka analisis menjadi sulit. Jadi, Anda perlu menghapus nilai null. userId menyertakan beberapa string kosong yang mungkin merupakan tindakan pengguna tidak terdaftar dari situs web mereka. Ini tidak menghubungkan pengguna tersebut dengan studi tentang tingkat churn ini, jadi kami menghilangkan mereka dari kumpulan data. Ini adalah baris yang saya gunakan di userId untuk menghapus nilai NaN dan string kosong..

Analisis Data Eksplorasi

Saat kami menjelajahi data, kami memasukkan semua data peristiwa ke dalam atribut 'halaman' yang merupakan salah satu fitur terpenting penelitian kami. Kami dapat mengklaim bahwa ketika pengguna mengunjungi halaman Konfirmasi Pembatalan, pengguna mungkin akan churn. Jadi kami akan mengidentifikasi variabel target kami menggunakan acara "Konfirmasi Pembatalan" di halaman sehingga jika pengguna (1) melakukan churn selain (0).

Mari kita lihat Fungsi Halaman yang memiliki variabel "Konfirmasi Pembatalan" yang darinya kita dapat memperoleh variabel target, yaitu churn atau tidak?

Kami telah melihat setiap distribusi fitur, dan fitur-fitur tersebut paling berpengaruh. Variabel target kami (churn) tidak seimbang. Demikian pula halnya dengan sebagian besar kumpulan data di dunia nyata.

Rekayasa Fitur

Sekarang kita sudah familiar dengan datanya, kita akan membuat fitur yang menurut kita menjanjikan untuk melatih model kita. Dalam penelitian kami, ada beberapa variabel lain yang dapat Anda coba periksa dan tingkatkan efisiensinya.

Seperti yang telah kita lihat, sebagian besar variabel bias dan tidak seimbang terhadap kelas atau tujuan variabel. Kami telah menghadirkan beberapa fitur yang kami gunakan dalam model kami yang disebutkan di bawah.

  • Tambahkan ke Daftar Putar
  • Gunakan Waktu (menggunakan Panjang dan Lagu Berikutnya)
  • Termasuk lebih banyak teman
  • Klien yang menggunakan alternatif Jempol Atas atau Bawah
  • Meminta bantuan
  • Klien berbayar atau Pengguna Gratis
  • Perampingan dan orientasi gender
  • Jumlah rata-rata pertemuan yang dicatat.

Di bawah ini adalah diagram fitur yang kami perhitungkan.

Kami memperoleh fitur yang kami yakini merupakan prediktor sasaran yang paling kuat, yaitu churn, dan akan menggunakan fitur tersebut untuk menguji/melatih model kami.

Sekarang dengan semua itu, mari buat tabel baru. Fitur yang kami temukan di atas

Saya menggabungkan semua tabel dan menyusun tabel baru untuk digunakan pada persiapan Model akhir.

Mari kita uji korelasi antara semua kolom yang dipilih sebelum melatih model:

Pemodelan

Selama beberapa kali pelatihan, saya pikir kecepatan pelatihan akan jauh lebih cepat setelah memulai ulang kernel dan membaca ulang hasilnya. Penting untuk memasukkan semua fitur ke dalam vektor sebelum melatih model.

Saya perhatikan bahwa banyak aplikasi saya adalah tipe string ketika menempatkan data ke dalam vektor, jadi saya harus mengonversinya menjadi float. Meskipun hal ini tidak mempengaruhi model pohon, standarisasi untuk model linier diperlukan. Saya setuju bahwa ini akan membuat standarisasi data.

Saya menggunakan metode pelatihan linier dan metode pohon, termasuk model logistik, Random Forest, dan GBT Classifier. Saya memilih model dengan kinerja terbaik, membagi set pengujian menggunakan validasi silang 3 kali lipat, dan pemeriksaan grid untuk menentukan parameter model set pelatihan. Terakhir, saya menggunakan paket validasi untuk menguji efisiensi model.

Kami membagi fungsi & sasaran kumpulan data variabel menjadi persiapan, pengujian, pembuatan saluran, dan penerapan berbagai model pembelajaran mesin. Karena jumlah pengguna yang churn relatif kecil, kami menggunakan skor F1 sebagai metrik untuk pengoptimalan, dan kami menemukan model terbaik untuk pengklasifikasi GBT dibandingkan model lain.

Hasil Kami membagi kumpulan data variabel fungsi & tujuan menjadi Pelatihan, pengujian, dan kemudian mengembangkan saluran dan akhirnya menerapkan 3 model pembelajaran mesin. Saya menggunakan fungsi di bawah ini untuk menemukan skor F1 dan akurasi model.

Terlampir pada gambar adalah Akurasi dan Skor F-1. Kode yang digunakan pada kumpulan data uji untuk menemukan keakuratan.

Akurasi setiap model pada kumpulan data Pengujian.

Logistic Regression Classifier Accuracy:0.8430953322074095
Random Forest  Classifier Accuracy:0.9638506593840958
GBT-Classifier  Classifier Accuracy:0.9915196377879191

Kode yang digunakan untuk mencari skor f-1 pada kumpulan data pengujian.

Skor F1 setiap model pada kumpulan data Pengujian:

Logistic Regression Classifier F1-Score:0.7765470592259909
Random Forest  Classifier F1-Score:0.9619697735890758
GBTClassifier  Classifier F1-Score:0.9914322037770119

Karena jumlah pengguna yang churn relatif kecil, kami menggunakan skor F1 sebagai metrik pengoptimalan, dan kami menganggap ini lebih cocok untuk GBTClassifier dibandingkan model lainnya.

Kesimpulan

Ringkasan

Langkah Terakhir

Rapikan kode Anda, tambahkan komentar, dan ganti nama variabel agar kode lebih mudah dibaca dan dipelihara. Lihat halaman Ikhtisar Proyek Spark dan Rubrik Proyek Capstone Ilmuwan Data untuk memastikan Anda menyertakan semua komponen proyek batu penjuru dan memenuhi semua harapan. Ingat, ini mencakup dokumentasi menyeluruh dalam file README di repositori GitHub, dan aplikasi web atau postingan blog.

Keterangan

Saya memperkenalkan model untuk memperkirakan churn klien di buku catatan ini. Saya menghilangkan baris tanpa userId dalam proses pembersihan data, mengubah gender menjadi kolom numerik biner. Kami merancang 10 fitur untuk model kami. Kami memilih 3 model: regresi logistik, Random Forest, dan GBTClassifier untuk memprediksi churn, dan terakhir kami memilih GBTClassifier sebagai model terakhir yang diterapkan untuk memprediksi hasilnya. VectorAssembler, yaitu transformator yang menggabungkan daftar kolom menjadi satu kolom vektor, digunakan untuk menyiapkan data dan mentransfer ke model. Karena jumlah pengguna yang churn cukup kecil, kami mengoptimalkan skor F1 sebagai metriknya.

Refleksi dari proyek ini.

Proyek ini memberikan paparan atmosfer percikan untuk menganalisis sejumlah besar data yang tidak dapat dianalisis oleh laptop pribadi. Dengan mengenali konsumen yang mempunyai risiko churn yang tinggi sebelum kerugian sebenarnya, bisnis dapat menggunakan biaya rendah untuk menyelamatkan konsumen melalui penggunaan komunikasi dan penawaran yang ditargetkan. Brainstorming tentang fungsionalitas yang dapat kami peroleh dari data yang kami miliki adalah salah satu hal yang menarik dan menantang selama proyek berlangsung. Mengembangkan fitur-fitur yang berguna sangat penting untuk menciptakan model yang sukses dan memerlukan banyak energi dan usaha. Analisis data penjelasan dan eksplorasi memainkan peran penting dalam proses ini, Bagian terbaiknya saya dapatkan dengan menggunakan kompetensi SQL Query saya.

Untuk mencegah churn, penting untuk mengikuti petunjuk berikut.

Setelah kami menentukan siapa yang akan melakukan churn dengan model Prediksi, kami kemudian harus mengambil tindakan untuk menghentikan mereka agar tidak melakukan churn dengan menjalankan beberapa penawaran promosi untuk menarik konsumen sasaran ini. Dan cari tahu apa penyebab utama bagi para pengguna yang tidak menyukai aplikasi Musik dan ubah kasus utama tersebut. Contoh: termasuk peningkatan pada UI, tarif berlangganan, dll…

Peningkatan

Setelah mempertimbangkan lebih banyak variabel, termasuk lebih banyak pengalaman dan keterampilan domain, kami dapat meningkatkan kualitas aplikasi secara signifikan. Meskipun volume data memerlukan alat seperti Spark untuk menganalisis, kita dapat menggunakan lebih banyak data untuk mendapatkan hasil yang lebih baik seiring bertambahnya basis pengguna.

Kami memiliki sekitar 223.106 akun pengguna unik, dan hanya 80 persen di antaranya yang digunakan untuk belajar. Meskipun demikian, model tersebut memiliki potensi besar untuk ditingkatkan jika ukuran sampelnya ditingkatkan, dan performa yang diharapkan juga akan meningkat.

Karena jumlah pengguna yang churn relatif kecil, kami menggunakan skor F1 sebagai metrik pengoptimalan.

Tindakan terakhir

Bersihkan kode Anda, tambahkan komentar, dan ubah variabel agar lebih mudah membaca dan mengelola kode Anda. Lihat halaman Deskripsi Proyek Spark dan Rubrik Proyek Capstone Ilmuwan Data untuk memastikan semua elemen proyek batu penjuru disertakan dan memenuhi semua standar. Catatan, ini mencakup dokumentasi komprehensif dalam file README repositori GitHub, dan aplikasi web atau postingan blog.

Saya telah mengunggah detail analisis saya ke repositori GitHub.

Lihat kode di GitHub: di sini