Khám phá nhân quả: Gà trống gáy có khiến mặt trời mọc không?

10 dòng mã Python để tự động hóa việc khám phá nhân quả mà bạn phải xem

Photo by Egor Myznik on Unsplash

Trọng tâm nghiên cứu gần đây của tôi là nguyên nhân diễn ra được thúc đẩy bởi các yêu cầu ngày càng tăng mà tôi nhận được từ khách hàng để vượt ra ngoài những dự đoán của máy học để trả lời “điều gì-nếu?” gõ câu hỏi để thúc đẩy tác động và kết quả.

Một trong những điều khiến tôi tò mò ban đầu là - “Sơ đồ nhân quả được xây dựng như thế nào?”. Trong nhiều ví dụ trực tuyến, chúng dường như xuất hiện đầy đủ mà không có lời giải thích nào về cách xác định các nút và liên kết.

Điều này khiến tôi đọc “Sách về lý do tại sao” của Judea Pearl và Dana Mackenzie (nhiều lần!) Và một quan điểm được đưa ra là bạn không thể đảo ngược sơ đồ nhân quả, còn được gọi là Đồ thị chu kỳ có hướng (DAG), từ dữ liệu một mình.

Dữ liệu có thể tiết lộ mối tương quan chứ không phải mối quan hệ nhân quả, vậy làm thế nào có thể “khám phá” ra mối quan hệ nhân quả?

Lưu ý: tất cả các bộ dữ liệu trong bài viết này đều được cấp phép sử dụng công cộng, vui lòng xem phần tài liệu tham khảo ở cuối bài viết để biết tất cả các nguồn và tài liệu tham khảo.

Trước khi chúng ta đi sâu vào khám phá nhân quả, vui lòng xem xét…

Tham gia Medium bằng liên kết giới thiệu của tôi (Tôi sẽ nhận được một phần phí nếu bạn đăng ký bằng liên kết này).

Đăng ký nhận e-mail miễn phí bất cứ khi nào tôi xuất bản một câu chuyện mới.

Xem nhanh các bài viết trước của tôi.

Tải xuống khung ra quyết định dựa trên dữ liệu chiến lược miễn phí của tôi.

Truy cập trang web khoa học dữ liệu của tôi - Blog dữ liệu.

Hãy xem xét số lượng giá trị từ tập dữ liệu nhị phân sau đây…

Lưu ý: bộ dữ liệu mặt trời mọc/gà trống là dữ liệu tổng hợp do tác giả tạo ra, vui lòng xem phần tham khảo cuối bài để biết đầy đủ nguồn và chi tiết tham khảo.

Hình ảnh của Tác giả

Chúng ta có thể thấy rằng gà trống gáy khi mặt trời mọc trong 90.25% số quan sát nhưng làm sao chúng ta biết được mặt trời mọc khiến gà gáy hay gà trống gáy khiến mặt trời mọc chỉ dựa trên dữ liệu?

Số trường hợp gà trống gáy khi mặt trời không mọc hoặc khi mặt trời mọc nhưng gà trống vẫn im lặng hầu như giống hệt nhau (50,000 so với 47,500) nên không thể tìm ra câu trả lời nhân quả bằng cách so sánh khối lượng dữ liệu tương đối.

Một cách tiếp cận có thể là nhìn vào khía cạnh thời gian. Nếu mặt trời mọc liên tục trước khi gà trống gáy thì đó sẽ là một dấu hiệu tốt về quan hệ nhân quả nhưng nếu gà trống của chúng ta là kẻ dậy sớm thì sao?

Câu trả lời là hãy tham khảo ý kiến ​​của các chuyên gia tên miền. Nếu chúng ta có thể tập hợp một đội gồm một nhà chiêm tinh, một nhà vật lý và một người chăn nuôi gia cầm, họ sẽ kết luận rằng mặt trời khiến gà trống gáy chứ không phải ngược lại!

Photo by Federico phản ứng on Unsplash

Không nản lòng trước cảnh mặt trời mọc và tiếng gà trống gáy, tôi bắt đầu tìm kiếm thứ gì đó đã có sẵn ở ngoài kia có thể thực hiện phép thuật khám phá nhân quả dựa trên dữ liệu.

Có một thuật toán tên là “NOTEARS” được cho là có thể triển khai khám phá nhân quả, vì vậy hãy thử xem nó có thể làm gì…

Lưu ý: bộ dữ liệu bệnh đậu mùa là dữ liệu tổng hợp do tác giả tạo ra, vui lòng xem phần tài liệu tham khảo cuối bài để biết đầy đủ nguồn và chi tiết tham khảo.

Hình ảnh của Tác giả

Bộ dữ liệu này đang mô hình hóa mối quan hệ nhân quả trong việc tiêm chủng bệnh đậu mùa. Hãy chạy thuật toán NOTEARS chống lại nó và xem nó có thể làm gì…

[('Phản ứng?', 'Tiêm chủng?'),
("Bệnh đậu mùa?', 'Phản ứng?'),
("Cái chết?', 'Phản ứng?'),
('Cái chết?', 'Bệnh đậu mùa?')]

Nếu chúng ta hình dung kết quả do NOTEARS tạo ra thì nó sẽ trông như thế này…

Hình ảnh của Tác giả

Nó trông không được tốt lắm phải không? Theo NOTEARS cái chết gây ra bệnh đậu mùa. Khía cạnh thời gian cho chúng ta biết rằng bệnh đậu mùa đến trước nên không thể do cái chết gây ra. Bệnh đậu mùa cũng không thể gây ra phản ứng (vắc-xin gây ra phản ứng) và phản ứng chắc chắn không thể gây ra phản ứng tiêm chủng.

Sử dụng kiến ​​thức của các chuyên gia trong lĩnh vực, chúng ta có thể dễ dàng xác định rằng việc tiêm chủng có tác động nhân quả đến việc bệnh nhân có phản ứng hay không và liệu họ có tiếp tục phát triển bệnh hay không, phản ứng và bệnh đậu mùa đều có mối liên hệ nhân quả với cái chết…

Hình ảnh của Tác giả

Vì vậy, chúng tôi đã chứng minh rằng ngay cả trong một mô hình nhân quả rất đơn giản, thuật toán khám phá nhân quả của NOTEARS không tạo ra kết quả chính xác. Ngoài ra, một độc giả của một trong những bài viết trước đây của tôi đã chỉ ra rằng NOTEARS không hoạt động trong Python 3.9 và vì tôi sắp nâng cấp nên đây là một vấn đề lớn khác.

Nếu bạn muốn đọc thêm về tính không phù hợp của NOTEARS đối với quan hệ nhân quả thì đây là một bài báo học thuật xuất sắc - https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser và Maksim Sipos).

Trước khi từ bỏ khám phá nhân quả hoàn toàn tự động, chúng ta hãy xem xét một giải pháp thay thế cho NOTEARS, thuật toán “Lasso” –

Lưu ý: bộ dữ liệu thu nhập điều tra dân số / thu nhập sau đại học được cấp phép sử dụng công cộng, vui lòng xem phần tài liệu tham khảo ở cuối bài viết để biết đầy đủ nguồn và chi tiết tham khảo.

Hình ảnh của Tác giả
Hình ảnh của Tác giả

Ôi trời, Lasso đúng là thảm họa! Nó đã dự đoán rằng mọi thứ đều gây ra mọi thứ khác và các nút cũng gây ra chính chúng!

Những nỗ lực cuối cùng của tôi là thử các thuật toán GES, GIES và LINGAM nhưng tất cả đều yêu cầu thư viện R. Tôi không sử dụng R và ngay cả khi tôi quản lý để có được cấu hình đúng, tôi sẽ không bao giờ có thể tạo mã di động mà các nhà khoa học dữ liệu khác có thể sử dụng.

Các thư viện và thuật toán khám phá nhân quả hiện có không hoạt động và điều này đã củng cố lại quan điểm được trình bày trong “Sách Tại sao” tức là không thể thiết kế ngược quan hệ nhân quả chỉ từ dữ liệu.

Kết luận này đã khiến tôi phát triển cách tiếp cận của riêng mình…

Photo by Amanda Jones on Unsplash

Thẻ trên bàn, tôi chưa viết thuật toán khám phá nhân quả. Đúng hơn là thuật toán của tôi thực hiện khám phá tương quan với một sự thay đổi (không có ý định chơi chữ!).

Khi tôi đã từ bỏ các thư viện khám phá nhân quả, tôi vẫn cần một cách để hình dung quan hệ nhân quả làm điểm khởi đầu cho cuộc trò chuyện với các chuyên gia về lĩnh vực.

Tôi lý luận rằng tôi có thể dễ dàng tính toán mối tương quan giữa các tính năng/nút và đây ít nhất sẽ là điểm khởi đầu tốt.

Tôi đã phát triển suy nghĩ của mình như sau - trong các mô hình khám phá nguyên nhân, chúng tôi thường xác định “hiệu ứng” tức là tính năng dữ liệu mà chúng tôi quan tâm (như “mục tiêu” trong dự đoán học máy). Trong ví dụ về bệnh đậu mùa, đây là “Cái chết?”, và trong ví dụ về thu nhập sau đại học, đó là thu nhập “GreaterThank50k”.

Do đó, nếu có mối tương quan giữa bất kỳ đặc điểm nào và “hiệu ứng” thì hướng nhân quả phải từ các đặc điểm khác đến hiệu ứng như ở “cuối dòng”.

Bước tiếp theo của tôi là phát triển một thuật toán đệ quy có thể được hình dung như sau…

Hình ảnh của Tác giả

Các liên kết trùng lặp và hai chiều phải bị loại trừ một cách cưỡng bức. Tôi cũng muốn có thể bao gồm hoặc loại trừ rõ ràng các kết nối (cạnh) và loại trừ rõ ràng các tính năng (nút).

Đây là 10 dòng mã Python đệ quy mà tôi nghĩ ra để triển khai khám phá nhân quả

Để cho thấy giải pháp này hoạt động như thế nào, tôi đã chọn một số dữ liệu về dữ liệu hủy đặt phòng khách sạn.

Hãy bắt đầu bằng cách đọc dữ liệu và xem qua các mối tương quan…

Lưu ý: bộ dữ liệu đặt phòng khách sạn được cấp phép sử dụng công cộng, vui lòng xem phần tài liệu tham khảo ở cuối bài viết để biết đầy đủ nguồn và chi tiết tham khảo.

Hình ảnh của Tác giả

Lần chạy đầu tiên của thuật toán khám phá liên quan đến việc giữ số lần lặp xuống 1 vì vậy chúng tôi chỉ xem xét các mối tương quan (có thể là nhân quả) với “hiệu ứng” tức là liệu việc đặt phòng khách sạn có bị hủy hay không…

Hình ảnh của Tác giả

OK, đó không phải là một khởi đầu tồi, hãy tăng số lần lặp/đệ quy/lớp lên 3, điều chỉnh ngưỡng tương quan một chút và xem chúng ta nhận được gì…

Hình ảnh của Tác giả

Được rồi, cũng không quá tệ, nhưng nó hơi “bận” nên bước tiếp theo là loại trừ một số nút mà chúng tôi nghi ngờ có thể gây ra một số nhiễu (lưu ý: trong trường hợp kinh doanh thực tế, chúng tôi sẽ nói chuyện với chuyên gia tên miền của chúng tôi ở giai đoạn này).

Hình ảnh của Tác giả

Điều này đang bắt đầu trông tốt hơn. Hãy nhớ rằng thuật toán của tôi tự tin rằng các liên kết đến “IsCancelled” là nguyên nhân vì nó là “hiệu ứng”, do đó không có gì xảy ra sau nó.

Tuy nhiên, các lớp khác của cây chỉ tương quan với nhau, hướng của các mũi tên được thêm vào chỉ dựa trên thứ tự mà thuật toán tìm thấy chúng.

Làm việc với các chuyên gia tên miền (hoặc kinh nghiệm đặt phòng khách sạn của riêng tôi trong trường hợp này!) Tôi nhận thấy những điều sau –

  • Liên kết từ “DifferentRoomAssigned” đến “LeadTime” sai hướng vì thời gian đặt phòng dài sẽ làm tăng khả năng việc đặt phòng sẽ thay đổi chứ không phải ngược lại.
  • Mối tương quan giữa “BookingChanges” và “DifferentRoomAssigned” nằm dưới ngưỡng nhưng nó có thể là một quan hệ nhân quả đáng kể nên cần phải đưa vào.

Lần thử tiếp theo sẽ hướng dẫn thuật toán thực hiện những chỉnh sửa này –

Hình ảnh của Tác giả

“ Yếu tố gây nhiễu không được quan sát” là yếu tố mà chúng tôi tin rằng đang tác động đến mô hình nhân quả của chúng tôi bằng cách cung cấp mối liên kết giữa một số nút, nhưng yếu tố đó chưa được đo lường và do đó chưa được đưa vào sơ đồ.

Kinh nghiệm đi đến khách sạn và kiến ​​thức của tôi về tập dữ liệu khách sạn khiến tôi nghi ngờ rằng có một “tác nhân gây nhiễu không quan sát được” đang ảnh hưởng đến dữ liệu khách sạn.

Có hai khách sạn trong dữ liệu - một khách sạn “thành phố” và một khách sạn “khu nghỉ dưỡng”. Điều này khiến tôi đưa ra giả thuyết rằng yếu tố gây nhiễu không được quan sát trong mô hình nhân quả này là “lý do nghỉ tại khách sạn”.

Giả thuyết của tôi là thế những người đi nghỉ chủ yếu ở khách sạn nghỉ dưỡng và những người kinh doanh và những người đi nghỉ ở thành phố chủ yếu ở khách sạn thành phố.

Hơn nữa, tôi đã đưa ra giả thuyết rằng hai nhóm này có những hành vi khác nhau và đây là “yếu tố gây nhiễu không được quan sát” (không được quan sát vì dữ liệu không nắm bắt được “lý do ở lại”).

LƯU Ý và các thuật toán tương tự khác không thể giải thích được “các yếu tố gây nhiễu không được quan sát” nhưng thuật toán mà tôi đã phát triển có thể tính đến chúng bằng cách đưa chúng vào một cách rõ ràng như sau…

Hình ảnh của Tác giả

Kết quả của lần lặp lại cuối cùng là một hình ảnh trực quan hợp lý, dễ đọc và dễ hiểu về quan hệ nhân quả trong dữ liệu khách sạn mà tôi có thể tự tin khám phá và tinh chỉnh cùng với các chuyên gia trong lĩnh vực. Đây là những điểm chính…

  • Có một “yếu tố gây nhiễu không thể quan sát được” là lý do chính cho việc ở lại (kỳ nghỉ hay đi công tác / nghỉ ở thành phố).
  • “Quốc gia” có tác động nhân quả đối với yếu tố gây nhiễu không được quan sát - những người đi du lịch từ một số quốc gia có nhiều khả năng đi nghỉ hơn.
  • Điều tương tự cũng áp dụng cho “TotalGuests”. Những bữa tiệc lớn có nhiều khả năng sẽ đi nghỉ, những người độc thân sẽ đi công tác và những người đôi sẽ đi nghỉ ở thành phố.
  • “Lý do lưu trú” không được quan sát có tác động nhân quả đến “LeadTime”, “HotelType” và “DepositType”.
  • “LeadTime”, “DifferentRoomAssigned”, “HotelType”, “DepositType” và “Lý do lưu trú” (U) đều có tác động nhân quả đến “IsCanceled”.

Khám phá nhân quả là quá trình vượt ra ngoài các liên kết tương quan để khám phá các liên kết nhân quả (tức là mũi tên thuộc về đầu nào của đường tương quan?). Điều này là không thể, hoặc ít nhất là cực kỳ khó khăn, để tự động hóa bằng các thuật toán như LƯU Ý vì câu trả lời không tồn tại trong dữ liệu.

Tuy nhiên, vẫn cần phải trực quan hóa mối quan hệ nhân quả để có thể cùng các chuyên gia trong lĩnh vực khám phá nó nhằm xây dựng sơ đồ nhân quả (còn được gọi là Đồ thị chu kỳ có hướng hoặc DAG).

Trong bài viết này, một thuật toán dựa trên việc tăng cường khám phá tương quan đã được đề xuất chỉ sử dụng 10 dòng mã Python có thể được các chuyên gia tên miền sử dụng để liên tục tinh chỉnh độ nhạy (ngưỡng) và để sửa, thêm hoặc xóa các liên kết (mũi tên) và loại trừ các liên kết không liên quan. điểm giao.

Trong các bài viết sau này, các sơ đồ nhân quả này sẽ được sử dụng để xây dựng một mô hình học máy nhân quả toàn diện có thể trả lời những câu hỏi phức tạp “điều gì sẽ xảy ra nếu?” gõ các câu hỏi từ khách hàng và lãnh đạo doanh nghiệp.

Nếu bạn thích bài viết này xin vui lòng xem xét…

Tham gia Medium bằng liên kết giới thiệu của tôi (Tôi sẽ nhận được một phần phí nếu bạn đăng ký bằng liên kết này).

Đăng ký nhận e-mail miễn phí bất cứ khi nào tôi xuất bản một câu chuyện mới.

Xem nhanh các bài viết trước của tôi.

Tải xuống khung ra quyết định dựa trên dữ liệu chiến lược miễn phí của tôi.

Truy cập trang web khoa học dữ liệu của tôi - Blog dữ liệu.

Mặt trời mọc/Dữ liệu gà gáy

Dữ liệu bệnh đậu mùa

Thu nhập sau đại học / Dữ liệu thu nhập điều tra dân số

Dữ liệu đặt phòng khách sạn

Khám phá nhân quả: Gà trống gáy có khiến mặt trời mọc không? Được xuất bản lại từ Nguồn https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing- Cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 qua https://towardsdatascience. com/nguồn cấp dữ liệu

<!–

->

Dấu thời gian:

Thêm từ Tư vấn chuỗi khối