본문 바로가기
데이터 분석, 통계/유튜브, 책, 아티클 정리

[Book] 행동 데이터 분석 4장 ~ 5장 : 인과관계 다이어그램과 교란 해소

by W_log 2023. 12. 14.

이 글은 행동 데이터 분석이라는 아래와 같은 책을 읽고 정리한 내용입니다. 앞에서 데이터 분석과 비판적 사고라는 책을 공부했었는데 좀 더 실무적으로 코드와 함께 살펴보고 싶고 다른 관점도 배우고 싶어서 공부하게 되었습니다. 

 

 

Chapter 4. 인과관계 다이어그램 만들기 

인과관계에서의 오류

 

 

실제 실무에서 인과관계를 파악할 때에는 단순히 원인과 결과만 살펴보면, 왠지 그럴듯해 보인다. 하지만 우리가 바라보는 실험 환경은 우리가 정의한 변수간의 관계만 바라보고 있으며, 실제 인과관계를 관찰하는 곳에서는 우리가 정의하지 못한 변수가 존재한다. 

 

실제로 비즈니스 세계에서는 특정 기능을 배포하고 나서 결과가 좋을 때 당연히 이 기능 배포로 인한 효과다라고 생각하기 쉽다. 따라서 위의 오류에 빠지지 않도록 어떤 관찰하지 못한 변수가 없는지 체크해보는 것이 필요하다.

 

 

책에서는 아래와 같은 관찰되지 않은 변수들 중에 자주 등장하는 유형들을 정리해두었다.

 

 

관찰되지 않은 변수들의 유형

 

1. 행동

 

행동 범주에는 주로 과거의 행동을 고려합니다. 위의 예시로 보면 취소 이력 여부 등이 영향을 줬을 수 있다.

 

2. 의도

 

데이터에서 누락되는 경우가 많아서 데이터 분석에서 간과하기 쉽다. 여행 목적, 취소 사유 등에서 이런 의도들을 추측할 수 있다. 주로 정성적인 것들이 많아서 인터뷰 등을 통해서 파악할 수 있다.

 

3. 인지와 감정

 

보증금에 대한 이해와 인지나 매물비용 취급을 하는 것과 같이 개인의 심리적 또는 인지적 현상을 의미한다.

 

4. 개인 특성

 

2번의 의도와 유사하게 개개인의 특성을 나타냅니다. 여러 성격 심리학 등의 학문에서 요인을 가져와볼 수 잇다. 성실성, 신경성, 계획성과 같은 개개인의 특성으로 볼 수 있다. 인구통계 변수도 포함된다.

 

5. 비즈니스 행동

 

여러 비즈니스 로직에 포함되는 내용이다. 예전에 예약을 취소한 적이 있는 모든 고객에게는 NRD를 적용해야한다는 규칙이 있을 수도 있고 이것이 분석 과정에서 우연히 포함되어 있을 수 있다.

 

6. 시간 추세

 

취소율이 점진적으로 증가하거나 예약수가 점진적으로 증가하는 것처럼 시간 추세에 영향을 받을 수 있다. 혹은 계절성과 같은 주기성도 고려해야한다.

 

 

위의 변수들을 고려해보면 실제 우리가 의도했던 인과관계보다 훨씬 더 많은 변수들이 인과관계 경로에 영향을 줄 수 있다는 것을 유의해야한다.

 

 

데이터를 기반으로 관찰 가능한 변수 검증하기

 

 

우선 관찰이 가능한 후보 변수만 따로 뽑아보았다. 이러한 데이터들은 원인이 되는 변수, 결과가 되는 변수 각각에 대한 인과관계를 모두 확인해보아야한다. 또한 데이터 유형에 따라서 이 검정방법이 다르다.

 

 

1. 숫자형 변수 사이의 관계 -> 상관계수 행렬을 우선 살펴본다. 

2. 범주형 변수 사이의 관계 -> 크래머 V 계수를 사용한다. (상관계수와 동일하게 1에 가까울 수록 연관성이 높다고 볼 수 있다.) 

3. 숫자형과 범주형 변수 사이의 관계 -> ANOVA, 집단별 평균 분석

 

import pandas as pd
import numpy as np
from scipy.stats import chi2_contingency

# 예시 데이터 생성
data = {'variable1': ['A', 'B', 'A', 'C'], 'variable2': ['X', 'X', 'Y', 'Z']}
df = pd.DataFrame(data)

# 교차 테이블 생성
contingency_table = pd.crosstab(df['variable1'], df['variable2'])

# 카이제곱 검정 수행
chi2, p, dof, _ = chi2_contingency(contingency_table)

# Cramér's V 계산
n = contingency_table.sum().sum()  # 전체 데이터 수
phi2 = chi2 / n
r, k = contingency_table.shape
phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))  # 표본 크기 보정
r_corr = r - ((r-1)**2)/(n-1)
k_corr = k - ((k-1)**2)/(n-1)
cramers_v = np.sqrt(phi2corr / min( (k_corr-1), (r_corr-1)))

print("Cramér's V:", cramers_v)

 

 

관찰되지 않은 변수에 대한 대리 변수 식별

 

여기서는 인터뷰와 연구 등을 기반으로 잠재적인 대리변수를 뽑아내는 방법을 활용할 수 있다. 관찰할 수 없는 변수 -> 관찰할 수 있는 변수로 근사화한다고 볼 수도 있다. 이러한 과정들을 반복하면서 변수들을 계속 확인하는 과정을 거치면서 다이어그램을 수정한다.

 

 

인과관계 다이어그램의 단순화

 

무수히 확장할 수 없기 때문에 적당 선에서 멈춘 후에는 다이어그램을 단순화하는 과정이 필요하다.

 

1. 상관계수가 너무 낮은 것들은 제거한다.

2. 중간 변수가 중요하지 않을 경우 사슬을 축소합니다.

3. 하나의 변수에 흥미로운 정보가 포함되어 있으면 변수를 분할합니다. 

4. 순환을 발견할 때마다 중간 단계를 도입해서 순환을 제거한다. 

 

 

 

Chapter 5. 인과관계 다이어그램을 통한 데이터 분석의 교란 해소

인과관계 다이어그램을 통해 봤을 때에는 상호간의 관계를 파악하기에 매우 쉽다. 하지만 교란 때문에 이 인과관계에 대한 해석이 잘못된 방향으로 흘러갈 수 있습니다. 

 

두 관심 변수의 공동 요인을 제대로 이해하지 못하면 상황을 잘못 해석하게 되고 관심 요인에 대한 회귀 계수는 편향됩니다. 이러한 교란 관계를 파악하는 방법은 다이어그램을 통해서 알 수 있습니다.

 

분리 인과 기준

정의 : 교란 해소의 첫번째 규칙으로, 관심 변수 사이의 매개변수를 제외하고 두 관심 변수 중 하나 또는 두 관심 변수 모두의 직접적인 원인이 되는 모든 변수를 회귀에 추가하면 관심 관계의 교란을 해소할 수 있다.

 

DCC를 적용하면 교란을 해소할 수 있지만 반드시 적용할 필요는 없습니다. (위 정의에 해당하는 조건이 없으면 그냥 진행해도 된다는 의미)

 

다만, 이 때 직접적인 영향을 줄 수 있는 변수 중에 데이터가 없는(관찰되지 않은) 변수가 존재하게 되면 이를 회귀에 포함시킬 수 없기 때문에 교란이 생기는 것도, 교란이 생기지 않는다고 확신할 수 없는 상황에 빠지게 됩니다. 

 

 

백도어 기준

정의 : 관심 요인으로 가는 화살표로 시작하는 1)차단되지 않은 2)비인과적 경로가 두 변수 사이에 하나 이상 있으면 두 변수 사이의 인과관계가 교란되는데 이런 비인과적 경로를 모두 차단합니다. 라고 책에는 써있는데 독립변수와 종속변수 사이의 모든 '백도어 경로(Backdoor Path)'를 차단하는 것이라고 볼 수 있다.

 

-> 이 기준에 해당하면 교란효과를 해결하기 위해 백도비충돌 변수 중 하나를 회귀에 포함시켜야 교란효과를 해소할 수 있다.

 

여기서 두가지 단어가 핵심이라서 좀 더 정리를 해보았다.

 

1) 차단 여부

 

말 그대로 그 관계가 차단되어 있으면, 우리는 이에 대해서 관심을 끊어도 된다는 이야기로 차단에 대한 기준은 아래와 같다.

경로에 있는 중간 변수 중 하나가 회귀에 포함되어 있으며 충돌이 아니거나 중심변수가 회귀에 포함되지 않은 충돌이 경로에 있다.

(충돌이란 두가지 원인이 결과에 영향을 주는 것)

 

2) 비인과적 경로

 

일전에 얘기한 모든 변수가 중복없이 하나의 같은 방향으로 향하는 경로를 인과적이라고 하는데 반대로 하나 이상의 충돌 또는 분기를 포함하는 경우를 비인과적 경로라고 한다. 인과관계란 b의 원인이 a이다. 이런식으로 표현하는 건데 화살표 방향이 섞여있으면 이를 비인과적 경로라고 할 수 있다.