Penemuan Kausal : Apakah Kokok Ayam Menyebabkan Matahari Terbit?

10 Baris kode Python untuk mengotomatiskan penemuan kausal yang harus Anda lihat

Foto oleh Egor Myznik on Unsplash

Fokus penelitian terbaru saya adalah kesimpulan kausal didorong oleh meningkatnya permintaan yang saya terima dari pelanggan untuk beralih dari sekadar prediksi pembelajaran mesin menjadi menjawab โ€œbagaimana-jika?โ€ ketik pertanyaan untuk mendorong dampak dan hasil.

Salah satu hal yang membuat saya penasaran pada awalnya adalah - โ€œBagaimana diagram sebab akibat dibuat?โ€. Dalam banyak contoh online, mereka tampak hidup sepenuhnya tanpa penjelasan tentang bagaimana node dan tautan diidentifikasi.

Hal ini mendorong saya untuk membaca โ€œThe Book of Whyโ€ oleh Judea Pearl dan Dana Mackenzie (beberapa kali!) dan salah satu pandangan yang diungkapkan adalah bahwa Anda tidak dapat merekayasa balik diagram sebab akibat, yang juga dikenal sebagai Directed Acyclic Graph (DAG), dari data sendiri.

Data dapat mengungkapkan korelasi tetapi tidak dapat mengungkap sebab akibat, jadi bagaimana mungkin โ€œmenemukanโ€ sebab akibat?

Catatan: semua kumpulan data dalam artikel ini dilisensikan untuk penggunaan umum, silakan lihat bagian referensi di akhir artikel untuk semua sumber dan referensi.

Sebelum kita mendalami penemuan sebab akibat, harap pertimbangkanโ€ฆ

Bergabung dengan Medium dengan tautan referensi saya (Saya akan menerima sebagian biaya jika Anda mendaftar menggunakan tautan ini).

Berlangganan email gratis setiap kali saya menerbitkan cerita baru.

Melihat sekilas artikel saya sebelumnya.

Mengunduh kerangka pengambilan keputusan berbasis data strategis gratis saya.

Mengunjungi situs web ilmu data saya โ€” Blog Data.

Pertimbangkan jumlah nilai dari kumpulan data biner berikutโ€ฆ

Catatan: kumpulan data sun rise/cockerel adalah data sintetik yang dibuat oleh penulis, silakan lihat bagian referensi di akhir artikel untuk sumber lengkap dan detail referensi.

Gambar oleh Penulis

Kita bisa melihat ayam berkokok saat matahari terbit pada 90.25% pengamatan, namun bagaimana kita tahu jika matahari terbit menyebabkan ayam berkokok atau ayam berkokok menyebabkan matahari terbit berdasarkan data saja?

Jumlah kejadian ketika ayam berkokok saat matahari tidak terbit atau saat matahari terbit namun ayam tetap diam hampir sama (50,000 vs. 47,500) sehingga jawaban kausal tidak dapat ditemukan dengan membandingkan volume data relatif.

Salah satu pendekatannya adalah dengan melihat aspek temporal. Jika matahari terbit secara konsisten sebelum ayam berkokok, hal ini akan menjadi indikator hubungan sebab dan akibat yang baik, namun bagaimana jika ayam jantan kita bangun pagi?

Jawabannya adalah berkonsultasi dengan pakar domain. Jika kita dapat membentuk tim yang terdiri dari seorang astrolog, fisikawan, dan peternak unggas, mereka akan menyimpulkan bahwa mataharilah yang menyebabkan ayam berkokok dan bukan sebaliknya!

Foto oleh Federico Respini on Unsplash

Tidak terpengaruh oleh matahari terbit dan ayam berkokok, saya berangkat mencari sesuatu yang sudah ada di luar sana yang mungkin bisa melakukan keajaiban penemuan kausal berdasarkan data.

Ada algoritma yang disebut โ€œNOTEEARSโ€ yang mengklaim mampu mengimplementasikan penemuan kausal, jadi mari kita coba dan lihat apa yang bisa dilakukannyaโ€ฆ

Catatan: kumpulan data cacar adalah data sintetis yang dibuat oleh penulis, silakan lihat bagian referensi di akhir artikel untuk sumber lengkap dan detail referensi.

Gambar oleh Penulis

Kumpulan data ini memodelkan hubungan sebab-akibat dalam vaksinasi cacar. Mari kita jalankan algoritme NOTEARS untuk melawannya dan lihat apa yang dapat dilakukannyaโ€ฆ

[('Reaksi?', 'Vaksinasi?'),
('Cacar?', 'Reaksi?'),
('Kematian?', 'Reaksi?'),
('Kematian?', 'Cacar?')]

Jika kita memvisualisasikan hasil yang dihasilkan oleh NOTEARS akan terlihat seperti iniโ€ฆ

Gambar oleh Penulis

Kelihatannya tidak bagus bukan? Menurut CATATAN, kematian menyebabkan penyakit Cacar. Aspek temporal menunjukkan bahwa penyakit cacar adalah yang utama sehingga tidak bisa menyebabkan kematian. Cacar juga tidak dapat menimbulkan reaksi (vaksin menyebabkan reaksi) dan reaksi tentu tidak dapat menyebabkan vaksinasi.

Dengan menggunakan pengetahuan para ahli di bidangnya, kita dapat dengan mudah menetapkan bahwa vaksinasi mempunyai efek sebab akibat terhadap reaksi pasien dan apakah mereka terus mengembangkan penyakit, dan reaksi serta cacar keduanya mempunyai hubungan sebab akibat dengan kematianโ€ฆ

Gambar oleh Penulis

Jadi, kami telah menetapkan bahwa bahkan dalam model kausal yang sangat sederhana, algoritma penemuan kausal NOTEARS tidak memberikan hasil yang benar. Selain itu, pembaca salah satu artikel saya sebelumnya menunjukkan bahwa NOTEARS tidak berfungsi di Python 3.9 dan saat saya akan memutakhirkan, ini adalah masalah besar lainnya.

Jika Anda ingin membaca lebih lanjut tentang ketidaksesuaian NOTEARS untuk kausalitas, berikut adalah makalah akademis yang bagus - https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser dan Maksim Sipos).

Sebelum kita menyerah pada penemuan kausal yang sepenuhnya otomatis, mari kita lihat alternatif dari NOTEARS, algoritma โ€œLassoโ€ โ€“

Catatan: kumpulan data pendapatan sensus/pendapatan lulusan dilisensikan untuk penggunaan umum, silakan lihat bagian referensi di akhir artikel untuk sumber lengkap dan detail referensi.

Gambar oleh Penulis
Gambar oleh Penulis

Ya ampun, Lasso adalah bencana! Ia telah meramalkan bahwa segala sesuatu menyebabkan segala sesuatu yang lain dan bahwa simpul-simpul itu menyebabkan dirinya sendiri juga!

Upaya terakhir saya adalah mencoba algoritma GES, GIES dan LINGAM tetapi semuanya memerlukan perpustakaan R. Saya tidak menggunakan R dan meskipun saya berhasil mendapatkan konfigurasi yang benar, saya tidak akan pernah bisa membuat kode portabel yang dapat digunakan oleh data scientist lainnya.

Pustaka dan algoritme penemuan kausal yang tersedia tidak berfungsi dan hal ini memperkuat pandangan yang diungkapkan dalam โ€œThe Book of Whyโ€ yaitu bahwa kausalitas tidak dapat direkayasa balik hanya dari data saja.

Kesimpulan ini membuat saya mengembangkan pendekatan saya sendiriโ€ฆ

Foto oleh Amanda Jones on Unsplash

Kartu di atas meja, saya belum menulis algoritma penemuan kausal. Sebaliknya algoritme saya mengimplementasikan penemuan korelatif dengan twist (tidak ada permainan kata-kata yang dimaksudkan!).

Ketika saya sudah menyerah pada perpustakaan penemuan sebab-akibat, saya masih memerlukan cara untuk memvisualisasikan sebab-akibat sebagai titik awal percakapan dengan pakar domain.

Saya beralasan bahwa saya dapat menghitung korelasi antara fitur/node dengan mudah dan setidaknya ini akan menjadi titik awal yang baik.

Saya mengembangkan pemikiran saya sebagai berikut - dalam model penemuan kausal kami biasanya mengidentifikasi โ€œefekโ€ yaitu fitur data yang kami minati (seperti โ€œtargetโ€ dalam prediksi pembelajaran mesin). Dalam contoh cacar, ini adalah โ€œKematian?โ€, dan dalam contoh penghasilan lulusan, ini adalah penghasilan โ€œlebih besar dari 50rbโ€.

Oleh karena itu, jika ada korelasi antara suatu ciri dan โ€œakibatโ€, maka arah sebab akibat harus dari ciri-ciri yang lain ke akibat yang ada pada โ€œgaris akhirโ€.

Langkah saya selanjutnya adalah mengembangkan algoritma rekursif yang dapat divisualisasikan sebagai berikutโ€ฆ

Gambar oleh Penulis

Tautan duplikat dan dua arah harus dihilangkan secara paksa. Saya juga ingin dapat secara eksplisit memasukkan atau mengecualikan koneksi (tepi) dan secara eksplisit mengecualikan fitur (node).

Ini adalah 10 baris kode Python rekursif yang saya buat untuk mengimplementasikan penemuan kausal

Untuk menunjukkan cara kerja solusinya, saya telah memilih beberapa data pada data pembatalan pemesanan hotel.

Mari kita mulai dengan membaca data dan mengintip korelasinyaโ€ฆ

Catatan: kumpulan data pemesanan hotel dilisensikan untuk penggunaan umum, silakan lihat bagian referensi di akhir artikel untuk sumber lengkap dan detail referensi.

Gambar oleh Penulis

Proses pertama dari algoritma penemuan melibatkan menjaga iterasi ke 1 jadi kita hanya melihat korelasinya (yang seharusnya bersifat kausal) dengan โ€œefekโ€ yaitu apakah pemesanan hotel dibatalkan atau tidakโ€ฆ

Gambar oleh Penulis

Oke, itu bukan awal yang buruk, mari tingkatkan jumlah iterasi/rekursi/lapisan menjadi 3, sesuaikan sedikit ambang korelasi dan lihat apa yang kita dapatkanโ€ฆ

Gambar oleh Penulis

Oke, tidak terlalu buruk juga, tapi agak "sibuk" sehingga langkah selanjutnya adalah mengecualikan beberapa node yang kami curigai mungkin menyebabkan beberapa kebisingan (catatan: dalam kasus bisnis dunia nyata kita akan berbicara dengan pakar domain kami pada tahap ini).

Gambar oleh Penulis

Ini mulai terlihat lebih baik. Ingatlah bahwa algoritme saya yakin bahwa tautan ke "IsCancelled" bersifat sebab-akibat karena ini adalah "efek", sehingga tidak ada hasil setelahnya.

Lapisan pohon lainnya hanya bersifat korelatif, arah panah ditambahkan hanya berdasarkan urutan algoritma menemukannya.

Bekerja dengan pakar domain (atau pengalaman saya sendiri dalam pemesanan hotel dalam hal ini!) Saya memperhatikan hal berikut โ€“

  • Tautan dari โ€œDifferentRoomAssignedโ€ ke โ€œLeadTimeโ€ berada di arah yang salah karena waktu tunggu pemesanan yang lama meningkatkan kemungkinan bahwa pemesanan kamar akan berubah dan bukan sebaliknya.
  • Korelasi antara โ€œBookingChangesโ€ dan โ€œDifferentRoomAssignedโ€ berada di bawah ambang batas namun mungkin merupakan penyebab yang signifikan sehingga perlu disertakan.

Upaya selanjutnya menginstruksikan algoritme untuk melakukan koreksi ini โ€“

Gambar oleh Penulis

โ€œPerancu yang tidak teramatiโ€ adalah faktor yang kami yakini berdampak pada model sebab-akibat kami dengan menyediakan hubungan antara beberapa titik, namun hal tersebut belum diukur dan oleh karena itu belum dimasukkan ke dalam diagram.

Pengalaman saya pergi ke hotel dan pengetahuan saya tentang kumpulan data hotel membuat saya curiga bahwa ada โ€œperancu yang tidak teramatiโ€ yang memengaruhi data hotel.

Ada dua hotel dalam data โ€“ hotel โ€œkotaโ€ dan hotel โ€œresorโ€. Hal ini membuat saya berhipotesis bahwa perancu yang tidak teramati dalam model sebab-akibat ini adalah โ€œalasan untuk menginap di hotelโ€.

Hipotesis saya adalah itu wisatawan terutama menginap di hotel resor dan pebisnis, sedangkan wisatawan kota terutama menginap di hotel kota.

Lebih lanjut saya telah berhipotesis bahwa kedua kelompok ini memiliki perilaku yang berbeda dan ini adalah โ€œperancu yang tidak teramatiโ€ (tidak teramati karena data tidak menangkap โ€œalasan untuk tetap tinggalโ€).

NOTEARS dan algoritme serupa lainnya tidak dapat menjelaskan โ€œperancu yang tidak teramatiโ€ tetapi algoritme yang saya kembangkan dapat memperhitungkannya dengan memasukkannya secara eksplisit sebagai berikutโ€ฆ

Gambar oleh Penulis

Hasil dari iterasi terakhir adalah visualisasi kausalitas dalam data hotel yang masuk akal, mudah dibaca, dan dapat dipahami, sehingga saya yakin dapat mengeksplorasi dan menyempurnakannya bersama pakar domain. Ini adalah poin-poin pentingโ€ฆ

  • Ada โ€œperancu yang tidak teramatiโ€ yang merupakan alasan utama untuk tetap tinggal (liburan vs. bisnis / liburan kota).
  • โ€œNegaraโ€ mempunyai dampak kausal terhadap perancu yang tidak teramati โ€” mereka yang bepergian dari beberapa negara lebih cenderung sedang berlibur.
  • Hal yang sama berlaku untuk โ€œTotalGuestsโ€. Pesta besar lebih cenderung dilakukan saat berlibur, para lajang lebih cenderung melakukan perjalanan bisnis, dan ganda saat liburan di kota.
  • โ€œAlasan menginapโ€ yang tidak teramati memiliki efek kausal pada โ€œLeadTimeโ€, โ€œHotelTypeโ€, dan โ€œDepositTypeโ€.
  • โ€œLeadTimeโ€, โ€œDifferentRoomAssignedโ€, โ€œHotelTypeโ€, โ€œDepositTypeโ€ dan โ€œReason for Stayโ€ (U) semuanya memiliki efek kausal pada โ€œIsCanceledโ€.

Penemuan Kausal adalah proses untuk melampaui hubungan korelatif menjadi menemukan hubungan sebab akibat (yaitu di ujung garis korelatif manakah anak panah tersebut berada?). Hal ini tidak mungkin, atau setidaknya sangat sulit, untuk diotomatisasi dengan algoritma seperti NOTEARS karena jawabannya tidak hanya ada pada data saja.

Namun, masih ada kebutuhan penting untuk memvisualisasikan sebab-akibat sehingga dapat dieksplorasi dengan pakar domain untuk membangun diagram sebab-akibat (juga disebut sebagai Directed Acyclic Graph atau DAG).

Dalam artikel ini, sebuah algoritme berdasarkan augmenting penemuan korelatif telah diusulkan dengan hanya menggunakan 10 baris kode Python yang dapat digunakan dengan pakar domain untuk berulang kali menyempurnakan sensitivitas (ambang batas) dan untuk mengoreksi, menambah atau menghapus tautan (panah) dan mengecualikan yang tidak relevan. node.

Di artikel mendatang, diagram sebab-akibat ini akan digunakan untuk membuat model pembelajaran mesin kausal lengkap yang dapat menjawab pertanyaan โ€œbagaimana jika?โ€ ketik pertanyaan dari pelanggan dan pemimpin bisnis.

Jika Anda menikmati artikel ini, harap pertimbangkanโ€ฆ

Bergabung dengan Medium dengan tautan referensi saya (Saya akan menerima sebagian biaya jika Anda mendaftar menggunakan tautan ini).

Berlangganan email gratis setiap kali saya menerbitkan cerita baru.

Melihat sekilas artikel saya sebelumnya.

Mengunduh kerangka pengambilan keputusan berbasis data strategis gratis saya.

Mengunjungi situs web ilmu data saya โ€” Blog Data.

Data Matahari Terbit / Ayam Berkokok

Data Cacar

Data Pendapatan Lulusan / Sensus

Data Pemesanan Hotel

Penemuan Penyebab : Apakah Ayam Berkokok Menyebabkan Matahari Terbit? Diterbitkan ulang dari Sumber https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rssโ€”-7f60cf5620c9โ€”4 melalui https://towardsdatascience. com/umpan

<!โ€“

->

Stempel Waktu:

Lebih dari Konsultan Blockchain