Melatih pohon keputusan terhadap data yang tidak seimbang


43

Saya baru dalam penambangan data dan saya mencoba untuk melatih pohon keputusan terhadap kumpulan data yang sangat tidak seimbang. Namun, saya mengalami masalah dengan akurasi prediksi yang buruk.

Data terdiri dari siswa yang belajar kursus, dan variabel kelas adalah status kursus yang memiliki dua nilai - Ditarik atau Lancar.

  • Usia
  • Etnisitas
  • Jenis kelamin
  • Tentu saja
    ...
  • Status Kursus

Dalam kumpulan data ada lebih banyak contoh yang Lancar daripada ditarik. Instance yang ditarik hanya menyumbang 2% dari total instance.

Saya ingin dapat membangun model yang dapat memprediksi probabilitas bahwa seseorang akan menarik diri di masa depan. Namun ketika menguji model terhadap data pelatihan, akurasi model tersebut mengerikan.

Saya memiliki masalah serupa dengan pohon keputusan di mana data didominasi oleh satu atau dua kelas.

Pendekatan apa yang bisa saya gunakan untuk mengatasi masalah ini dan membangun classifier yang lebih akurat?


4
Satu hal yang perlu dipertimbangkan adalah mengubah ketentuan hukuman untuk berbagai jenis klasifikasi yang salah. Anda tidak mengatakan perangkat lunak apa yang Anda gunakan, tetapi saya percaya semua perangkat lunak pohon yang baik harus mencakup cara untuk melakukan ini.
Peter Flom - Kembalikan Monica

Jawaban:


61

Ini adalah masalah yang menarik dan sangat sering terjadi dalam klasifikasi - tidak hanya di pohon keputusan tetapi di hampir semua algoritma klasifikasi.

Seperti yang Anda temukan secara empiris, satu set pelatihan yang terdiri dari jumlah perwakilan yang berbeda dari kedua kelas dapat menghasilkan classifier yang bias terhadap kelas mayoritas. Ketika diterapkan pada set tes yang juga tidak seimbang, pengklasifikasi ini menghasilkan estimasi akurasi optimis. Dalam kasus ekstrim, pengklasifikasi dapat menetapkan setiap kasus uji tunggal untuk kelas mayoritas, sehingga mencapai akurasi yang sama dengan proporsi kasus uji milik kelas mayoritas. Ini adalah fenomena yang terkenal dalam klasifikasi biner (dan meluas secara alami ke pengaturan multi-kelas).

Ini adalah masalah penting, karena dataset yang tidak seimbang dapat menyebabkan perkiraan kinerja yang meningkat. Ini pada gilirannya dapat mengarah pada kesimpulan yang salah tentang signifikansi yang dilakukan algoritma lebih baik daripada kebetulan.

Literatur pembelajaran mesin pada topik ini pada dasarnya telah mengembangkan tiga strategi solusi.

  1. Anda dapat mengembalikan keseimbangan pada set latihan dengan undersampling kelas besar atau dengan oversampling kelas kecil, untuk mencegah bias muncul di tempat pertama.

  2. Sebagai alternatif, Anda dapat memodifikasi biaya kesalahan klasifikasi, seperti dicatat dalam respons sebelumnya, sekali lagi untuk mencegah bias.

  3. Perlindungan tambahan adalah untuk mengganti keakuratan dengan ketepatan yang disebut seimbang . Ini didefinisikan sebagai rata-rata aritmatika dari akurasi khusus kelas, mana dan mewakili akurasi yang diperoleh pada contoh positif dan negatif, masing-masing. Jika classifier berkinerja sama baiknya di kedua kelas, istilah ini mengurangi ke akurasi konvensional (yaitu, jumlah prediksi yang benar dibagi dengan jumlah total prediksi). Sebaliknya, jika akurasi konvensional di atas kebetulan hanya karena penggolong mengambil keuntungan dari set tes yang tidak seimbang, maka keakuratan yang seimbang, jika sesuai, akan jatuh ke peluang (lihat sketsa di bawah).π+π-ϕ:=12(π++π),π+π

Akurasi vs akurasi seimbang

Saya akan merekomendasikan untuk mempertimbangkan setidaknya dua pendekatan di atas bersamaan. Sebagai contoh, Anda dapat melakukan oversample kelas minoritas Anda untuk mencegah classifier Anda dari mendapatkan bias mendukung kelas mayoritas. Setelah ini, ketika mengevaluasi kinerja classifier Anda, Anda dapat mengganti keakuratan dengan keakuratan yang seimbang. Kedua pendekatan tersebut saling melengkapi. Ketika diterapkan bersama-sama, mereka akan membantu Anda berdua mencegah masalah asli Anda dan menghindari kesimpulan salah yang mengikutinya.

Saya akan dengan senang hati mengirimkan beberapa referensi tambahan ke literatur jika Anda ingin menindaklanjuti hal ini.


3
Broder - terima kasih atas info terperinci. Itu sangat membantu! Saya awalnya mencoba menggunakan fungsionalitas penambangan data di SQL Server, namun, mengikuti saran Anda, saya beralih menggunakan R. Saya menggunakan algoritma SMOTE untuk menyeimbangkan kembali kumpulan data dan mencoba menggunakan pohon keputusan dan SVM. DT memberikan akurasi seimbang 81%, dan bahkan lebih baik dengan SVM. Satu pertanyaan - apakah saya harus menguji model terhadap set data yang juga berisi data rebalancd? Atau haruskah itu diuji terhadap data yang lebih seperti aslinya?
chrisb

2
Ini bagus untuk didengar. Mengenai pertanyaan Anda: Anda tidak ingin menyeimbangkan data pengujian Anda. Ini akan membiaskan evaluasi kinerja Anda, karena Anda akan menguji beberapa contoh dua kali (dalam kasus oversampling) atau menghilangkan beberapa contoh dari pengujian (dalam kasus undersampling). Singkatnya, Anda ingin menyeimbangkan set pelatihan Anda (secara terpisah dalam setiap lipatan validasi silang), tetapi kemudian uji pada data uji yang tidak dimodifikasi (berpotensi tidak seimbang).
Kay Brodersen

Terima kasih, Broder. Melakukan hal itu memberikan gambaran berbeda tentang berbagai hal. Akurasi seimbang turun menjadi sekitar 56%. Sensitivitas turun menjadi 17% pada model terbaik saya (sesuai dengan kelas yang saya butuhkan untuk mendapatkan prediksi yang lebih baik). Saya kira ini masuk akal karena kelas oversampled adalah kelas itu sehingga contoh-contoh itu akan dihitung beberapa kali. Saya akan mencoba meningkatkan keseimbangan dari set data pelatihan untuk melihat apakah ini ada bedanya.
chrisb

Setelah sekarang mengujinya dengan proporsi yang berbeda dari data seimbang, akurasi seimbang terbaik yang bisa saya dapatkan adalah dengan Ada Boost dengan 60%. Saya berjuang meskipun untuk menentukan apa yang "baik". Tujuan utama saya adalah untuk memprediksi siswa yang dapat Menarik diri dari kursus mereka. Dengan Withdraw menjadi kelas positif saya, saya telah berusaha untuk memaksimalkan jumlah positif sejati saya (yaitu meningkatkan sensitivitas). Menyeimbangkan ulang data melakukan ini dengan merugikan jumlah negatif palsu. 60% sepertinya tidak jauh lebih baik daripada acak bagi saya - tetapi saya tidak memiliki garis dasar untuk apa yang "baik" dalam kasus ini.
chrisb

2
@ Chrisb, Ini sedikit terlambat (!) Pada garis singgung, Anda dapat mencoba regresi Cox Proportional Hazards ( cran.r-project.org/doc/contrib/Fox-Companion/… ) untuk memodelkan kelangsungan hidup siswa Anda. Anda mungkin tidak perlu down-sampling atau berlebihan.
Zhubarb

8

Empat ide berikut dapat membantu Anda mengatasi masalah ini.

  1. Pilih ukuran kinerja yang sesuai dan kemudian sempurnakan hyperparameters model Anda --eg regularisasi - untuk mendapatkan hasil yang memuaskan pada dataset Validasi Silang dan setelah puas, uji model Anda pada dataset pengujian. Untuk tujuan ini, tetapkan 15% dari data Anda untuk digunakan untuk validasi silang dan 15% untuk digunakan untuk pengujian akhir. Ukuran yang ditetapkan dalam Pembelajaran Mesin, yang dianjurkan oleh Andrews Ng adalah statistik F1 yang didefinisikan sebagai . Cobalah untuk memaksimalkan angka ini pada dataset Validasi Silang dan pastikan kinerjanya stabil pada dataset pengujian juga.2PrecisionRecallPrecision+Recall

  2. Gunakan parameter 'sebelum' dalam Pohon Keputusan untuk menginformasikan algoritma frekuensi sebelumnya dari kelas dalam dataset, yaitu jika ada 1.000 positif dalam set dataset 1.000.0000 prior = c(0.001, 0.999)(dalam R).

  3. Gunakan argumen 'bobot' dalam fungsi klasifikasi yang Anda gunakan untuk menghukum berat algoritma untuk kesalahan klasifikasi kasus positif yang jarang terjadi

  4. Gunakan argumen 'biaya' dalam beberapa algoritma klasifikasi - misalnya rpartdalam R-- untuk menentukan biaya relatif untuk kesalahan klasifikasi positif sejati dan negatif sebenarnya. Anda tentu harus menetapkan biaya tinggi untuk kesalahan klasifikasi kelas langka.

Saya tidak mendukung oversampling, karena memperkenalkan pengamatan dependen dalam dataset dan ini melanggar asumsi independensi yang dibuat dalam Statistik dan Pembelajaran Mesin.


2

Saya memberi jawaban dalam topik terakhir :

Apa yang kami lakukan adalah memilih sampel dengan proporsi berbeda. Dalam contoh di atas, itu akan menjadi 1000 kasus "YA" dan, misalnya, 9000 dari kasus "TIDAK". Pendekatan ini memberikan model yang lebih stabil. Namun, itu harus diuji pada sampel nyata (dengan 1.000.000 baris).

Tidak hanya memberikan pendekatan yang lebih stabil, tetapi model umumnya lebih baik, sejauh menyangkut langkah-langkah yang diangkat.

Anda dapat mencarinya sebagai "oversampling dalam statistik", hasil pertama cukup bagus: http://www.statssa.gov.za/isi2009/ScientificProgramme/IPMS/1621.pdf


1

Menambah jawaban @Kay Strategi solusi pertama: Sintetis Minoritas Berlebihan ( SMOTE ) biasanya lebih baik daripada kurang atau lebih pengambilan sampel dari pengalaman saya karena saya pikir itu semacam menciptakan kompromi antara keduanya. Ini menciptakan sampel sintetik dari kelas minoritas menggunakan titik data yang diplot pada ruang prediktor multivarian dan lebih atau kurang membutuhkan titik tengah antara titik yang berdekatan pada ruang tersebut untuk membuat titik sintetis baru dan karenanya menyeimbangkan kedua ukuran kelas. (tidak yakin dengan titik tengah, detail algoritma di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.