Cara berprinsip untuk mengecilkan variabel kategori dengan banyak tingkatan?

58

Teknik apa yang tersedia untuk mengelompokkan (atau mengelompokkan) banyak kategori menjadi beberapa, untuk tujuan menggunakannya sebagai input (prediktor) dalam model statistik?


Pertimbangkan variabel seperti jurusan mahasiswa (disiplin yang dipilih oleh mahasiswa sarjana). Itu tidak teratur dan kategorikal, tetapi berpotensi memiliki lusinan tingkat yang berbeda. Katakanlah saya ingin menggunakan jurusan sebagai prediktor dalam model regresi.

Menggunakan level ini apa adanya untuk memodelkan mengarah ke segala macam masalah karena ada begitu banyak. Banyak ketepatan statistik akan dibuang untuk menggunakannya, dan hasilnya sulit untuk ditafsirkan. Kami jarang tertarik pada jurusan tertentu - kami jauh lebih tertarik pada kategori luas (subkelompok) jurusan. Tetapi tidak selalu jelas bagaimana membagi level menjadi kategori tingkat yang lebih tinggi, atau bahkan berapa banyak kategori tingkat yang lebih tinggi untuk digunakan.

Untuk data umum, saya akan senang menggunakan analisis faktor, faktorisasi matriks, atau teknik pemodelan laten diskrit. Tapi jurusan adalah kategori yang saling eksklusif, jadi saya ragu untuk mengeksploitasi kovarian mereka untuk apa pun.

Selain itu saya tidak peduli dengan kategori utama sendiri. Saya peduli tentang menghasilkan kategori tingkat yang lebih tinggi yang koheren sehubungan dengan hasil regresi saya . Dalam kasus hasil biner, yang menunjukkan kepada saya sesuatu seperti analisis diskriminan linier (LDA) untuk menghasilkan kategori tingkat yang lebih tinggi yang memaksimalkan kinerja diskriminatif. Tapi LDA adalah teknik terbatas dan rasanya seperti data kotor yang dikeruk bagi saya. Terlebih lagi setiap solusi berkelanjutan akan sulit untuk ditafsirkan.

Sementara itu sesuatu yang didasarkan pada kovarian, seperti analisis korespondensi ganda (MCA), tampaknya mencurigakan bagi saya dalam kasus ini karena ketergantungan yang melekat di antara variabel dummy yang saling eksklusif - mereka lebih cocok untuk mempelajari beberapa variabel kategori, daripada beberapa kategori dari variabel yang sama.

sunting : agar jelas, ini tentang runtuh kategori (bukan memilihnya), dan kategorinya adalah prediktor atau variabel independen. Kalau dipikir-pikir, masalah ini sepertinya merupakan waktu yang tepat untuk "mengatur semuanya dan membiarkan Tuhan memilah mereka". Senang melihat pertanyaan ini menarik bagi banyak orang!

shadowtalker
sumber
2
Dalam komentar saya di stats.stackexchange.com/questions/230636/... Saya punya daftar panjang pertanyaan serupa di sini! Lihat ... Juga, cari situs ini dengan kata kunci "banyak level" Anda menemukan banyak pertanyaan serupa, beberapa jawaban yang baik.
kjetil b halvorsen
3
Saya akan kembali ke ini ketika saya punya waktu ... sementara itu, berikut ini adalah makalah yang sangat relevan yang tampaknya menjawab pertanyaan, sebagian: epub.ub.uni-muenchen.de/12164/1/petry_etal_TR102_2011. pdf
kjetil b halvorsen
2
Saya tidak berpikir saya mendapatkan pertanyaan, dorongan alami saya sebenarnya adalah menambahkan lebih banyak variabel dummy untuk menyandikan hierarki (bisa dibilang sebanyak banyak hierarki yang dapat Anda pikirkan) dan kemudian menggunakan regularisasi L1 / L2 untuk memastikan bahwa kategori tingkat atas dipilih daripada kategori tingkat yang lebih baik. masalah dengan jurusan dll adalah bahwa jelas tidak ada kesamaan (ketika direpresentasikan sebagai variabel dummy) sehingga untuk mendapatkan model yang baik (yang memungkinkan generalisasi) Anda perlu memberikan kesamaan itu
seanv507
1
@ssdecontrol, ya, contoh prototipikal saya adalah nomor telepon (atau ID lainnya). Pada dasarnya jawaban yang benar ketika ditanya bagaimana model menggunakan ini - jangan!
seanv507
2
Jika Anda ingin menyimpulkan hierarki, Anda dapat melihat skema penanaman jaringan Neural. Pada dasarnya mereka menggunakan set neuron yang berkurang antara kategori dan sisa model, sehingga model harus menemukan proyeksi linier dari kategori yang sama dalam penyelesaian. Ini pada dasarnya adalah versi mesin factorisation yang tidak linier. tensorflow.org/guide/embedding
seanv507

Jawaban:

41

Jika saya mengerti dengan benar, Anda membayangkan model linier di mana salah satu prediktornya kategorikal (misalnya jurusan kuliah); dan Anda berharap bahwa untuk beberapa subkelompok levelnya (subkelompok kategori) koefisiennya mungkin persis sama. Jadi mungkin koefisien regresi untuk Matematika dan Fisika adalah sama, tetapi berbeda dari untuk Kimia dan Biologi.

Dalam kasus paling sederhana, Anda akan memiliki model linier "satu arah ANOVA" dengan satu prediktor kategori: mana menyandikan level variabel kategorikal (the kategori). Tetapi Anda mungkin lebih suka solusi yang runtuh beberapa level (kategori) bersama-sama, misalnya

yij=μ+αi+ϵij,
i
{α1=α2,α3=α4=α5.

Ini menunjukkan bahwa seseorang dapat mencoba menggunakan penalti regularisasi yang akan menghukum solusi dengan alfabet yang berbeda. Satu istilah penalti yang langsung muncul di benak Anda adalahIni menyerupai laso dan harus menegakkan sparsity dari perbedaan , yang persis seperti yang Anda inginkan: Anda ingin banyak dari mereka menjadi nol. Parameter pengaturan harus dipilih dengan validasi silang.

L=ωi<j|αiαj|.
αiαjω

Saya tidak pernah berurusan dengan model seperti itu dan di atas adalah hal pertama yang terlintas di benak saya. Kemudian saya memutuskan untuk melihat apakah ada sesuatu seperti itu yang diterapkan. Saya membuat beberapa pencarian google dan segera menyadari bahwa ini disebut fusi kategori; mencari lasso fusion categoricalakan memberi Anda banyak referensi untuk dibaca. Berikut adalah beberapa yang secara singkat saya lihat:

Gertheiss dan Tutz 2010, yang diterbitkan dalam Annals of Applied Statistics, tampak seperti makalah baru-baru ini dan sangat mudah dibaca yang berisi referensi lain. Berikut ini abstraknya:

Metode menyusut dalam analisis regresi biasanya dirancang untuk prediktor metrik. Dalam artikel ini, metode penyusutan untuk prediktor kategoris diusulkan. Sebagai aplikasi, kami mempertimbangkan data dari standar sewa Munich, di mana, misalnya, daerah perkotaan diperlakukan sebagai prediktor kategori. Jika variabel independen dikategorikan, beberapa modifikasi untuk prosedur penyusutan biasa diperlukan. Dua metode -penalty untuk pemilihan faktor dan pengelompokan kategori disajikan dan diselidiki. Pendekatan pertama dirancang untuk tingkat skala nominal, yang kedua untuk prediktor ordinal. Selain menerapkannya pada standar sewa Munich, metode diilustrasikan dan dibandingkan dalam studi simulasi.L1

Saya suka jalur solusi seperti Lasso mereka yang menunjukkan bagaimana level dua variabel kategori digabung bersama ketika kekuatan regularisasi meningkat:

Gertheiss dan Tutz 2010

amuba kata Reinstate Monica
sumber
1
Dan hanya setelah menulis semua yang saya perhatikan bahwa @Kjetil memberikan tautan ke salah satu surat kabar oleh Tutz sudah seminggu yang lalu ...
amoeba mengatakan Reinstate Monica
1
Terima kasih telah menggali literatur tentang ini! Ini jelas merupakan titik awal yang baik, terutama yang memiliki nama untuk teknik ini ("fusion") yang dapat saya cari
shadowtalker
10

Saya telah bergulat dengan ini pada proyek yang sedang saya kerjakan, dan pada titik ini saya telah memutuskan bahwa tidak ada cara yang baik untuk menggabungkan kategori dan jadi saya mencoba model hirarki / efek campuran di mana saya setara dengan jurusan Anda adalah efek acak.

Juga, dalam situasi seperti ini tampaknya sebenarnya ada dua keputusan sekering untuk membuat: 1) bagaimana menggabungkan kategori yang Anda miliki ketika Anda cocok dengan model, dan 2) apa kategori menyatu menjadi "lain" di mana Anda secara default akan memasukkan yang baru jurusan yang diimpikan seseorang setelah Anda cocok dengan model Anda. (Efek acak dapat menangani kasus kedua ini secara otomatis.)

Ketika sekering memiliki penilaian yang terlibat (sebagai lawan dari prosedur yang sepenuhnya otomatis), saya skeptis terhadap kategori "lain" yang sering kali menjadi kantong kategori dengan beberapa hal di dalamnya daripada pengelompokan berprinsip apa pun.

Efek acak menangani banyak level, secara dinamis menyatukan ("menarik kekuatan dari") level yang berbeda, dapat memprediksi level yang sebelumnya tidak terlihat, dll. Salah satu kelemahannya adalah distribusi level hampir selalu dianggap normal.

Wayne
sumber
1
Sudahkah Anda melihat menggunakan matriks jarak sebagai matriks jarak Anda untuk mengelompok? stats.stackexchange.com/questions/270201/… ?
Keith
7

Salah satu cara untuk menangani situasi ini adalah dengan mengkode ulang variabel kategorikal menjadi variabel kontinu, menggunakan apa yang dikenal sebagai "target coding" (alias "impact coding") [1]. Biarkan menjadi variabel input dengan level kategorikal , dan biarkan menjadi variabel output / target / respons. Ganti dengan , di manaZz1,...,zKYZImpact(Z)

Impact(zk)=E(Y | Z=zk)E(Y)

untuk bernilai kontinu . Untuk bernilai biner , gunakan alih-alih hanya .YYlogitEE

Ada implementasi Python di perpustakaan category_encoders [2].

Varian yang disebut "impact coding" telah diimplementasikan dalam paket R Vtreat [3] [4]. Paket (dan dampak pengkodean itu sendiri) dijelaskan dalam sebuah artikel oleh para penulis dari 2016 [5], dan dalam beberapa posting blog [6]. Perhatikan bahwa implementasi R saat ini tidak menangani respons multinomial (kategorikal dengan lebih dari 2 kategori) atau multivarian (bernilai vektor).

  1. Daniele Micci-Barreca (2001). Skema Preprocessing untuk Kardinalitas Tinggi Atribut Kategorikal dalam Masalah Klasifikasi dan Prediksi. ACM SIGKDD Explorations Newsletter , Volume 3, Edisi 1, Juli 2001, Halaman 27-32. https://doi.org/10.1145/507533.507538
  2. Pengkode Kategori. http://contrib.scikit-learn.org/categorical-encoding/index.html
  3. John Mount dan Nina Zumel (2017). vtreat: Prosesor / Kondisioner 'Data.frame' yang Suara Secara Statistik. Paket R versi 0.5.32. https://CRAN.R-project.org/package=vtreat
  4. Menang-Vektor (2017). vtreat. GitHub repositori di https://github.com/WinVector/vtreat
  5. Zumel, Nina dan Mount, John (2016). vtreat: sebuah prosesor data.frame untuk Pemodelan Prediktif. 1611.09477v3, ArXiv e-print . Tersedia di https://arxiv.org/abs/1611.09477v3 .
  6. http://www.win-vector.com/blog/tag/vtreat/
shadowtalker
sumber
Apa itu logit E? Bisakah Anda membagikan formula itu sendiri?
Optimus Prime
@OptimusPrime logit E adalah logit dari harapan
shadowtalker
Baik. Jadi dalam kasus itu, Dampak (zk) = log (E (Y | Z = zk) −E (Y)) ATAU Dampak (zk) = log (E (Y | Z = zk)) - log (E (Y) )?
Optimus Prime
2
Ini adalah pembelajaran yang diawasi dan akan membutuhkan penyesuaian yang rumit untuk mengenali jumlah derajat kebebasan yang "dicuri" dari Y.
Frank Harrell
3
Yang pasti - metode apa pun yang menggunakan Y untuk memandu bagaimana kategori ditangani untuk prediktor kategoris akan dikenakan overfitting dan akan sulit untuk mendapatkan interval ketidakpastian yang cukup lebar untuk akurat. Saya fokus pada pembelajaran tanpa pengawasan sehingga masalah itu tidak terjadi.
Frank Harrell
6

Jika Anda memiliki variabel bebas tambahan yang logis untuk digunakan sebagai jangkar untuk prediktor kategori, pertimbangkan penggunaan algoritma skoring optimal Fisher, yang terkait dengan analisis diskriminan liniernya. Misalkan Anda ingin memetakan mata kuliah perguruan tinggi menjadi satu metrik kontinu tunggal, dan anggaplah jangkar yang tepat adalah skor tes kuantitatif SAT pra-penerimaan. Hitung skor kuantitatif rata-rata untuk setiap mata pelajaran dan ganti mata uang utama dengan nilai rata-rata itu. Anda dapat dengan mudah memperluas ini ke beberapa jangkar, menciptakan lebih dari satu derajat kebebasan untuk meringkas utama.

Perhatikan bahwa tidak seperti beberapa saran sebelumnya, penilaian optimal mewakili pendekatan pembelajaran tanpa pengawasan, sehingga derajat kebebasan (jumlah parameter yang diperkirakan terhadap Y) sedikit dan terdefinisi dengan baik, menghasilkan inferensi statistik yang tepat (jika sering, kesalahan standar yang akurat, kepercayaan diri). (kompatibilitas) interval, dan nilai-p).

Saya sangat menyukai saran hukuman dengan https://stats.stackexchange.com/users/28666/amoeba @amoeba.

Frank Harrell
sumber
Apakah Anda akan berbaik hati melihat stats.stackexchange.com/q/383887/44368 pertanyaan saya ? Terima kasih.
Hans
Apakah penilaian optimal metode yang dijelaskan pada slide 15 dari kuliah ini ? Agak sulit untuk mencari istilah-istilah itu, semuanya menjadi umum dalam konteks lain.
shadowtalker
1
Saya yakin 0,85
Frank Harrell
Ini kedengarannya seperti (lebih baik) versi gagasan target encoding dari pembelajaran mesin, misalnya stats.stackexchange.com/questions/398903/…
kjetil b halvorsen
2

Makalah " Skema preprocessing untuk atribut kategori kardinalitas tinggi dalam masalah klasifikasi dan prediksi " memanfaatkan struktur hierarkis dalam atribut kategori dalam skema 'empiris Bayes' yang bersarang di setiap kelompok / level untuk memetakan variabel kategorikal ke dalam probabilitas kelas posterior, yang dapat digunakan secara langsung atau sebagai input ke model lain.

Sealander
sumber
Ini pada dasarnya adalah apa yang disarankan oleh @Wayne (model efek campuran ~ versi sering dari model hierarki Bayesian), dan apa yang saya sarankan dalam komentar untuk pertanyaan. Namun OP ingin menyimpulkan hierarki.
seanv507
1

Ada beberapa pertanyaan di sini, dan beberapa di antaranya ditanyakan & dijawab sebelumnya. Jika masalahnya adalah perhitungan yang membutuhkan waktu lama: Ada beberapa metode untuk mengatasinya, lihat regresi skala besar dengan matriks fitur jarang dan makalah oleh Maechler dan Bates .

Tetapi mungkin masalahnya adalah pada pemodelan, saya tidak begitu yakin bahwa metode yang biasa memperlakukan variabel prediktor kategoris benar-benar memberikan panduan yang cukup ketika memiliki variabel kategorikal dengan level yang sangat banyak, lihat situs ini untuk melihat tag [many-categories]. Tentunya ada banyak cara yang bisa dicoba, seseorang bisa (jika ini adalah ide yang bagus untuk contoh Anda, saya tidak bisa tahu, Anda tidak memberi tahu kami aplikasi spesifik Anda) semacam variabel kategori hirarki, yaitu, terinspirasi oleh sistem yang digunakan dalam klasifikasi biologis, lihat https://en.wikipedia.org/wiki/Taxonomy_(biology). Di sana seorang individu (tumbuhan atau hewan) diklasifikasikan pertama kali ke Domain, lalu Kerajaan, Filum, Kelas, Ketertiban, Keluarga, Genus dan akhirnya Spesies. Jadi untuk setiap level dalam klasifikasi Anda dapat membuat variabel faktor. Jika level Anda, adalah, katakanlah, produk yang dijual di supermarket, Anda dapat membuat klasifikasi hierarkis dimulai dengan [bahan makanan, peralatan dapur, lainnya], maka bahan makanan dapat diklasifikasikan sebagai [daging, ikan, sayuran, sereal, ...] dan begitu seterusnya. Hanya kemungkinan, yang memberikan hierarki sebelumnya, tidak secara khusus terkait dengan hasilnya.

Tapi kamu bilang:

Saya peduli tentang menghasilkan kategori tingkat yang lebih tinggi yang koheren sehubungan dengan hasil regresi saya.

Kemudian Anda dapat mencoba laso yang menyatu , lihat jawaban lain di utas ini, yang dapat dilihat sebagai cara meruntuhkan level ke dalam grup yang lebih besar, seluruhnya berdasarkan data, bukan organisasi level sebelumnya seperti yang tersirat dalam proposal hierarkis saya. organisasi tingkat.

kjetil b halvorsen
sumber