인과적 발견: 수평아리 울음이 해를 뜨게 합니까?

당신이 봐야 할 인과관계 발견을 자동화하는 10줄의 Python 코드

님이 촬영 한 사진 에고 르 미즈 닉 on Unsplash

나의 최근 연구의 초점은 다음과 같다. 인과적 추론 기계 학습 예측을 넘어 "만약?"에 대한 답변으로 전환해 달라는 고객의 요청이 늘어나면서 이에 힘입었습니다. 영향력과 결과를 이끌어내기 위한 질문을 입력하세요.

처음에 제가 흥미를 느꼈던 것 중 하나는 "인과관계 다이어그램은 어떻게 구성됩니까?"였습니다. 많은 온라인 예에서 노드와 링크가 어떻게 식별되었는지에 대한 설명 없이 완전한 형태로 생생하게 나타나는 것처럼 보입니다.

이로 인해 나는 Judea Pearl과 Dana Mackenzie의 "The Book of Why"를 여러 번 읽었으며 표현된 한 가지 견해는 데이터에서 방향성 비순환 그래프(DAG)라고도 알려진 인과 다이어그램을 리버스 엔지니어링할 수 없다는 것입니다. 홀로.

데이터는 상관관계를 밝힐 수 있지만 인과관계는 밝혀낼 수 없습니다. 그렇다면 인과관계를 "발견"하는 것이 어떻게 가능합니까?

참고: 이 기사의 모든 데이터 세트는 공개 사용이 허가되었습니다. 모든 소스와 참고 자료는 기사 끝 부분의 참고 자료 섹션을 참조하세요.

인과관계 발견에 대해 알아보기 전에 다음 사항을 고려하십시오.

내 추천 링크로 Medium에 가입하기 (이 링크를 통해 가입하시면 수수료의 일부를 저에게 드립니다.)

새로운 기사를 올릴 때마다 무료 이메일을 구독합니다.

이전 글을 잠깐 살펴보면.

무료 전략적 데이터 기반 의사 결정 프레임워크 다운로드.

내 데이터 과학 웹사이트 방문 — 데이터 블로그.

다음 이진 데이터 세트의 값 개수를 고려하세요.

참고: 일출/수탉 데이터 세트는 작성자가 만든 합성 데이터입니다. 전체 소스 및 참조 세부정보는 기사 마지막에 있는 참조 섹션을 참조하세요.

작성자 별 이미지

관측의 90.25%에서 해가 뜰 때 수탉이 우는 것을 알 수 있는데, 데이터만 가지고 해가 뜨면 수탉이 울고, 수탉이 울면 해가 뜬다는 것을 어떻게 알 수 있을까요?

해가 뜨지 않을 때 수탉이 우는 경우와 해가 떴지만 조용히 있을 때 수탉이 우는 경우의 횟수는 거의 동일(50,000 vs. 47,500)해 상대적인 데이터량 비교로는 원인 답을 찾을 수 없다.

한 가지 접근 방식은 시간적 측면을 살펴보는 것일 수 있습니다. 수평아리가 울기 전에 해가 지속적으로 뜨는 경우 이는 인과 관계를 나타내는 좋은 지표가 될 것입니다. 그러나 우리 수평아리가 일찍 일어나는 경우에는 어떻게 될까요?

대답은 도메인 전문가에게 문의하는 것입니다. 점성가, 물리학자, 가금류 사육자로 팀을 구성할 수 있다면 그들은 태양이 수탉을 울게 만드는 것이지 그 반대가 아니라고 결론을 내릴 것입니다!

님이 촬영 한 사진 페데리코 레스피니 on Unsplash

해가 뜨고 수탉이 우는 소리에도 굴하지 않고 나는 데이터를 기반으로 인과관계 발견의 마법을 수행할 수 있을 만한 이미 존재하는 무언가를 찾기 위해 출발했습니다.

인과관계 발견을 구현할 수 있다고 주장하는 "NOTEARS"라는 알고리즘이 있습니다. 한번 시도해 보고 그것이 무엇을 할 수 있는지 살펴보겠습니다.

참고: 천연두 데이터 세트는 작성자가 만든 합성 데이터입니다. 전체 소스 및 참조 세부정보는 기사 마지막 부분의 참조 섹션을 참조하세요.

작성자 별 이미지

이 데이터세트는 천연두 예방접종의 인과관계를 모델링하고 있습니다. 이에 대해 NOTEARS 알고리즘을 실행하고 그것이 무엇을 할 수 있는지 살펴보겠습니다.

[('반응?', '예방접종?'),
('천연두?', '반응?'),
('죽음?', '반응?'),
('죽음?', '천연두?')]

NOTEARS의 결과를 시각화하면 다음과 같습니다.

작성자 별 이미지

별로 좋아 보이지 않죠? NOTEARS에 따르면 사망으로 인해 천연두가 발생합니다. 일시적인 측면에서 볼 때 천연두가 먼저 발생하므로 사망으로 인해 발생할 수는 없습니다. 천연두도 반응을 일으킬 수 없으며(백신이 반응을 일으킴), 반응이 백신 접종을 유발할 수도 없습니다.

해당 분야 전문가의 지식을 활용하여 우리는 예방접종이 환자에게 반응이 있는지 여부와 질병이 계속 발생하는지 여부에 인과 관계가 있으며 반응과 천연두 모두 사망과 인과 관계가 있다는 것을 쉽게 확인할 수 있습니다.

작성자 별 이미지

그래서 우리는 매우 단순한 인과 모델에서도 NOTEARS 인과 발견 알고리즘이 올바른 결과를 산출하지 못한다는 사실을 확립했습니다. 또한 내 이전 기사 중 하나를 읽은 독자는 NOTEARS가 Python 3.9에서 작동하지 않으며 곧 업그레이드할 예정이므로 이것이 또 다른 큰 문제라고 지적했습니다.

인과관계에 대한 NOTEARS의 부적합에 대해 더 자세히 알고 싶다면 여기 훌륭한 학술 논문이 있습니다. https://arxiv.org/pdf/2104.05441.pdf (마커스 카이저와 막심 시포스).

완전히 자동화된 인과관계 발견을 포기하기 전에 NOTEARS의 대안인 "Lasso" 알고리즘을 살펴보겠습니다.

참고: 인구 조사 소득/졸업생 소득 데이터 세트는 공개적으로 사용하도록 허가되었습니다. 전체 출처 및 참조 세부정보를 보려면 기사 끝에 있는 참조 섹션을 확인하세요.

작성자 별 이미지
작성자 별 이미지

아, 올가미는 재앙이야! 모든 것이 다른 모든 것을 유발하고 노드도 스스로를 유발한다고 예측했습니다!

나의 마지막 시도는 GES, GIES 및 LINGAM 알고리즘을 시도하는 것이었지만 모두 R 라이브러리가 필요합니다. 나는 R을 사용하지 않으며 구성을 올바르게 잡았더라도 다른 데이터 과학자가 사용할 수 있는 이식 가능한 코드를 결코 만들 수 없습니다.

사용 가능한 인과관계 발견 라이브러리와 알고리즘은 작동하지 않으며 이는 "이유의 책"에서 표현된 관점, 즉 데이터만으로는 인과관계를 역설계할 수 없다는 관점을 다시 강화했습니다.

이 결론으로 ​​인해 나는 나만의 접근 방식을 개발하게 되었습니다.

님이 촬영 한 사진 아만다 존스 on Unsplash

테이블 위의 카드에는 인과관계 발견 알고리즘을 작성하지 않았습니다. 오히려 내 알고리즘은 반전을 사용하여 상관 검색을 구현합니다(말장난 의도는 아닙니다!).

인과관계 발견 라이브러리를 포기했을 때에도 도메인 전문가와의 대화를 위한 출발점으로 인과관계를 시각화하는 방법이 필요했습니다.

나는 특징/노드 사이의 상관관계를 쉽게 계산할 수 있고 이것이 적어도 좋은 출발점이 될 것이라고 추론했습니다.

저는 다음과 같이 생각을 발전시켰습니다. 인과 발견 모델에서 우리는 일반적으로 "효과", 즉 우리가 관심 있는 데이터 특징(예: 기계 학습 예측의 "목표")을 식별합니다. 천연두 예에서는 "죽음?"이고, 대학원 수입 예에서는 "greaterThank50k" 수입입니다.

따라서 어떤 특성과 "효과" 사이에 상관 관계가 있는 경우 인과 방향은 "선 끝"에 있는 것처럼 다른 특성에서 효과로 향해야 합니다.

다음 단계는 다음과 같이 시각화할 수 있는 재귀 알고리즘을 개발하는 것이었습니다.

작성자 별 이미지

중복 및 양방향 링크는 강제로 제외해야 합니다. 또한 연결(에지)을 명시적으로 포함하거나 제외하고 기능(노드)을 명시적으로 제외할 수 있기를 원했습니다.

인과관계 발견을 구현하기 위해 제가 생각해낸 10줄의 재귀 Python 코드입니다.

솔루션이 어떻게 작동하는지 보여주기 위해 호텔 예약 취소 데이터에 대한 일부 데이터를 선택했습니다.

먼저 데이터를 읽고 상관관계를 살펴보겠습니다.

참고: 호텔 예약 데이터 세트는 공개적으로 사용할 수 있도록 라이선스가 부여되었습니다. 전체 소스 및 참조 세부정보는 기사 끝부분의 참조 섹션을 참조하세요.

작성자 별 이미지

검색 알고리즘의 첫 번째 실행에는 반복을 1로 유지하는 것이 포함되므로 "효과", 즉 호텔 예약이 취소되었는지 여부와 상관관계(인과관계가 있어야 함)만 살펴봅니다.

작성자 별 이미지

좋아요, 나쁘지 않은 시작입니다. 반복/재귀/레이어 수를 3으로 늘리고 상관 임계값을 약간 조정하여 결과를 살펴보겠습니다.

작성자 별 이미지

좋아, 나쁘지는 않지만 약간 "바쁨"이므로 다음 단계는 소음을 유발할 수 있다고 의심되는 일부 노드를 제외하는 것입니다(참고: 실제 비즈니스 사례에서는 우리가 논의할 것입니다). 이 단계에서는 도메인 전문가가 있습니다).

작성자 별 이미지

이것은 더 좋아 보이기 시작했습니다. 내 알고리즘은 "IsCancelled"에 대한 링크가 "효과"이기 때문에 인과 관계가 있다고 확신하므로 그 뒤에는 아무 것도 나오지 않습니다.

트리의 다른 레이어는 단지 상호 연관되어 있지만 화살표의 방향은 단순히 알고리즘이 찾은 순서에 따라 추가되었습니다.

도메인 전문가(또는 이 경우 호텔 예약에 대한 내 경험!)와 협력하여 다음 사항을 발견했습니다.

  • "DifferentRoomAssigned"에서 "LeadTime"으로의 링크는 잘못된 방향입니다. 예약 리드 타임이 길면 객실 예약이 변경되고 그 반대가 되지 않을 확률이 높아지기 때문입니다.
  • "BookingChanges"와 "DifferentRoomAssigned" 간의 상관 관계는 임계값보다 낮지만 인과관계가 클 수 있으므로 포함해야 합니다.

다음 시도에서는 알고리즘에 이러한 수정을 수행하도록 지시합니다.

작성자 별 이미지

"관찰되지 않은 혼란 요인"은 일부 노드 사이에 링크를 제공하여 인과 모델에 영향을 미친다고 생각하지만 측정되지 않았으므로 다이어그램에 포함되지 않은 요소입니다.

호텔에 가본 경험과 호텔 데이터 세트에 대한 지식으로 인해 호텔 데이터에 영향을 미치는 "관찰되지 않은 혼란 요인"이 있다고 의심하게 되었습니다.

데이터에는 "도시" 호텔과 "리조트" 호텔이라는 두 개의 호텔이 있습니다. 이로 인해 나는 이 인과 모델에서 관찰되지 않은 혼란 요인은 다음과 같다는 가설을 세웠습니다. “호텔에 묵는 이유”.

내 가설은 휴가객은 주로 리조트 호텔에 묵고, 비즈니스맨과 도시 거주자는 주로 시티 호텔에 숙박합니다..

게다가 나는 이 두 그룹이 서로 다른 행동을 가지고 있으며 이것이 "관찰되지 않은 혼란 요인"(데이터가 "체재 이유"를 포착하지 못하기 때문에 관찰되지 않음)이라는 가설을 세웠습니다.

NOTEARS 및 기타 유사한 알고리즘은 "관찰되지 않은 혼란 요인"을 설명할 수 없지만 제가 개발한 알고리즘은 다음과 같이 명시적으로 포함시킴으로써 이를 고려할 수 있습니다.

작성자 별 이미지

최종 반복의 결과는 도메인 전문가와 함께 탐색하고 개선할 수 있는 호텔 데이터의 인과성에 대한 그럴듯하고 읽기 쉽고 이해하기 쉬운 시각화입니다. 이것이 핵심 포인트입니다…

  • 숙박(휴일 대 비즈니스/도시 휴가)의 주요 이유인 "관찰되지 않은 혼란 요인"이 있습니다.
  • "국가"는 관찰되지 않은 혼란 요인에 인과적 영향을 미칩니다. 일부 국가에서 여행하는 사람들은 휴가를 보낼 가능성이 더 높습니다.
  • "TotalGuests"에도 동일하게 적용됩니다. 대규모 파티는 휴가를 보낼 가능성이 더 높으며, 싱글은 출장을 가고, 더블은 도시 휴가를 보낼 가능성이 더 높습니다.
  • 관찰되지 않은 "체류 이유"는 "LeadTime", "HotelType" 및 "DepositType"에 인과적 영향을 미칩니다.
  • "LeadTime", "DifferentRoomAssigned", "HotelType", "DepositType" 및 "Reason for Stay"(U)는 모두 "IsCanceled"에 인과 관계가 있습니다.

인과관계 발견 상관 관계를 넘어 인과 관계를 발견하는 과정입니다(즉, 화살표가 상관 선의 어느 끝에 속하는가?). 답은 데이터에만 존재하지 않기 때문에 NOTEARS와 같은 알고리즘을 사용하여 자동화하는 것은 불가능하거나 적어도 엄청나게 어렵습니다.

그러나 인과 관계 다이어그램(방향성 비순환 그래프 또는 DAG라고도 함)을 구축하기 위해 도메인 전문가와 함께 인과 관계를 탐색할 수 있도록 인과 관계를 시각화하는 것이 여전히 중요합니다.

이 기사에서는 민감도(임계값)를 반복적으로 개선하고 링크(화살표)를 수정, 추가 또는 제거하고 관련 없는 항목을 제외하기 위해 도메인 전문가와 함께 사용할 수 있는 단 10줄의 Python 코드를 사용하여 상관 발견 증대에 기반한 알고리즘이 제안되었습니다. 노드.

향후 기사에서는 이러한 인과 다이어그램을 사용하여 복잡한 "만약?"에 답할 수 있는 완전한 인과 기계 학습 모델을 구축할 것입니다. 고객과 비즈니스 리더의 질문을 입력하세요.

이 기사가 마음에 드셨다면 고려해 보시기 바랍니다.

내 추천 링크로 Medium에 가입하기 (이 링크를 통해 가입하시면 수수료의 일부를 저에게 드립니다.)

새로운 기사를 올릴 때마다 무료 이메일을 구독합니다.

이전 글을 잠깐 살펴보면.

무료 전략적 데이터 기반 의사 결정 프레임워크 다운로드.

내 데이터 과학 웹사이트 방문 — 데이터 블로그.

떠오르는 태양 / 수평아리 울음소리 데이터

천연두 데이터

대학원 소득 / 인구 조사 소득 데이터

호텔 예약 데이터

인과관계 발견 : 수평아리가 울면 태양이 뜨는가? 소스 https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4에서 https://towardsdatascience를 통해 다시 게시되었습니다. com/피드

<!–

–>

타임 스탬프 :

더보기 블록 체인 컨설턴트