아래 글은 모두 'step by step [파이썬 비즈니스 통계분석]' 교재를 기초로 진행한 내용입니다. 모든 장은 이전 장과 이어져 있으니, 세부 내용 및 이전 글이 궁금하시다면 해당 블로그의 이전 장과 교재를 참고해주시면 되겠습니다.~~
1. 카이제곱 검정
수치형 변수가 아닌 데이터들은 어떻게 분석할까? 카테고리별로 구분되어 있는 변수들을 숫자로 바꿔서? 글쎄.. 우린 앞서 수치형 데이터들을 상관관계 분석, 기술통계분석 등을 통해 여러 가설들을 검증하고 결론은 도출했다. 그렇다면 수치화된 데이터들을 아닌 경우에는 어떤 분석 기법을 사용할까? 이제부터 한 번 알아보자.
카이제곱 검정은 적합도 검정, 독립성 검정, 동질성 검정 총 3가지로 분류한다.
- 적합도 검정 : 관측 결과가 특정한 분포로부터의 생성된 관측값인지를 검정(ex. K 통신사의 광고 후 이동통신 3사에 대한 시장점유율 검정)
- 독립성 검정 : 두 범주형 변수 사이의 연관성이 있는지를 검정(ex. 직업유형과 선호상품이 서로 관계가 있는지 검정)
- 동질성 검정 : 다른 두 모집단으로부터 생성된 두 표본의 분포가 동일한지 검정(ex. 서울과 부산지역 고객들의 선호 품목이 유사한지 검정)
1) 적합도 검정
적합도 검정은 귀무가설에서 제시한 각 범주의 비율이 실제 자료에 적합한지를 알아보는 검정 방법으로, 데이터가 여러 개의 범주에 대한 '관측 도수' 형태로 주어지는 문제를 다룰 때 사용한다. (이게 무슨 말이지?)
Ex)
- 어느 기업의 매장 별 판매비율이 A: 30%, B: 40%, C : 50%라고 했을 때, 올해도 3개의 점포가 과연 알려진 기존의 판매비율과 동일한 지 판단할 때 적합도 검정을 사용한다. 즉, 알려진 모집단의 분포를 통해 예상되는 기대도수와 실제 표본을 통해 실제로 얻어진 관측도수 사이에 어느 정도의 차이가 있는지를 검정하는 것이다.
적합도 검정을 수행하는 과정을 한 번 살펴보자.
1. 빈도교차표 작성
적합도 검정은 카이제곱 통계량을 사용하므로 빈도교차표에 의한 비율검정을 기반으로 한다. 적합도 검정에서는 검정의 대상이 되는 한 가지 명목 변수로 구성된 빈도교차표를 하는데, 적합도 검정에서의 빈도교차표는 1개의 범주형 변수만 사용되므로 일반적인 도수분포표와 같다.

2. 기대도수 산출
기대도수는 이미 알려진 모집단의 각 범주 별 비율을 p1, p2, ...pk라고 했을 때, 관측도수의 행 빈도합인 n과 곱해 npk의 값으로 산출된다.

3. 카이제곱 통계량 산출
범주 별 관측도수와 기대도수가 작성되었으므로, 범주별 카이제곱 값을 산출할 수 있다.
범주 별 카이제곱 통계량은 각 셀의 관측도수와 기대도수 간 차이의 제곱값을 해당 셀의 기대도수로 나눈 값을 의미하며, 전체 카이제곱 통계량은 이 각 셀의 카이제곱 값을 모두 합한 값이다.

따라서, 관측도수와 기대도수의 차이가 크지 않다면, 카이제곱 통계량은 작고, 이는 귀무가설에서 제시한 각 범주의 비율과 실제 자료에 나타난 범주의 비율이 크게 다르지 않음을 의미한다. 반대로, 관측도수와 기대도수의 차이가 크다면 귀무가설에서 제시한 각 범주의 비율은 실제 자료와 적합하지 않음을 의미한다. (+ 카이제곱 통계량의 자유도는 범주의 수 - 1이다.)
# 실습
A 쇼핑은 클레임고객들의 구매 패턴이 어떻게 다른지 파악하고자 클레임 고객들의 구매유형 별 비율의 적합도 검정을 시행하고자 한다.
기존에 알려진 A 쇼핑의 클레임고객들의 구매 유형별 비율은 1회성 구매형 고객 10%, 실용적 구매형 30%, 명품 구매형 20%, 그리고 집중 구매형 40%로 알려져 있었다. 고객 구매유형과 클레임 접수여부에 대한 코드는 다음과 같다.
구매유형 구분
- 1회성 구매형: 1
- 실용적 구매형: 2
- 명품 구매형: 3
- 집중 구매형: 4
클레임 접수 여부 구분
- 접수하지 않음: 0
- 접수경험 있음: 1
가설
- H0 = 클레임 접수 고객의 구매유형별 비율은 1회성 구매형 10%, 실용적 구매 30%, 명품 구매형 20%, 집중 구매형 40%이다.
- H1 = 클레임 접수 고객의 구매유형별 비율은 1회성 구매형 10%, 실용적 구매 30%, 명품 구매형 20%, 집중 구매형 40%이 아니다.
X = pd.crosstab(df['클레임접수여부'], df['구매유형'], margins = True)
X
""" crosstab() 함수를 통해 클레임접수여부와 구매유형을 데이터 프레임 형태로 구성했고,
margins = True로 설정함으로써 각 열과 행의 합계를 산출했다."""

# 빈도교차표를 통해 확인한 관측도수를 활용해 기대도수를 구하고, 적합도 검정을 시행해보자.
Ob = X.values[1, :4]
Pr = np.array([0.1, 0.3, 0.2, 0.4])
n = X.values[1, 4]
E = n * Pr
stats.chisquare(Ob, E)
# Power_divergenceResult(statistic = 31.58278, p-value = 6.40767...e-07)
카이제곱 통계량은 31.58, p-value는 0.01 이하로 출력되었다.
# 결론
귀무가설( 클레임 접수 고객의 구매유형별 비율은 1회성 구매형 10%, 실용적 구매 30%, 명품 구매형 20%, 집중 구매형 40%이다. )의 기각으로 구매유형 별 클레임 접수 여부는 과거의 분포를 따르고 있지 않음을 알 수 있다. 1회성 구매형 구매자들의 경우 클레임 비율이 높지 않으며, 집중 구매형의 경우 50%가 넘는 클레임 비율을 보이고 있다. 따라서, 집중 구매형 고객들의 고객 만족도를 높이는 방안을 모색해야 한다.
2) 독립성 검정
독립성 검정은 두 개의 범주형 변수 간에 서로 연관성이 있는지, 독립적인지를 카이제곱 검정을 통해 통계적으로 판단하는 방법이다.
Ex)
- 학력이라는 범주형 변수와 고객의 등급이라는 범주형 변수 간에 서로 연관성이 있는지, 독립적인지를 판단하는 문제에 독립성 검정을 사용할 수 있다. 두 변수의 관련성을 보려면 적합도 검정과 마찬가지로 빈도교차표를 만들어서 카이제곱 검정을 하게 되는데, 기대도수를 계산하는 방식에서 차이가 있다.
1. 두 가지 명목변수 빈도교차표를 작성한다.
명목변수 : A, B (두 가지 범주형 변수간의 상관관계를 따져야 하기 때문)

2. 기대도수 빈도교차표를 작성한다.
적합도 검정에서는 귀무가설에서 각 범주에 해당하는 모집단 비율을 이용해 기대도수를 계산했다면 독립성 검정에서 각 셀의 기대도수는 해당 분류 기준의 행 빈도합과 열 빈도합의 곱을 총 빈도의 합으로 나눈 값이다.

3. 카이제곱 통계량을 산출한다.
각 셀에 대한 관측도수와 기대도수 차이의 제곱값을 해당 셀의 기대도수로 나눈 것을 의미하며, 각 셀의 카이제곱 값을 모두 합한 값이 전체 카이제곱 통계량이 된다.

두 명목변수 간에 연관성이 존재하지 않는다면 관측도수와 기대도수 값은 유사하게 나타나야 하므로, 전체 카이제곱 통계량의 값은 매우 작아진다. 반대로 두 명목변수 간에 어떤 상호 연관성이 존재한다면 관측도수와 기대도수는 큰 차이를 보이게 되므로, 전체 카이제곱 통계량 값은 매우 커지게 된다.
# 실습
A 쇼핑의 클레임 문제를 다시 한번 들여다보자. A 쇼핑은 클레임을 제기하는 고객은 성별과 무관하지 않은 것 같다는 전제를 가지고 클레임 접수여부와 성별 간의 독립성 검정을 수행한다.
- H0 = 클레임 접수 여부와 성별은 연관성이 없다.
- H1 = 클레임 접수 여부와 성별은 연관성이 있다.
클레임을 접수한 고객과 성별의 연관성이 존재하는지 독립성 검정을 통해 확인해보자.
성별 구분
- 남성: 0
- 여성: 1
1. 클레임 접수 여부와 성별의 빈도교차표 = ('위와 동일')
Y = pd.crosstab(df['성별'], df['클레임접수여부'], margins = False)
Y

2. 출력한 빈도교차표를 토대로 독립성 검정을 시행한다.
stats_chi2_contingency(Y)
# Chi2Contingency(statistic = 106.437906... p-value = 5. 911607...e-25, dof = 1,
# expected_freq = array([[ 80.609, 68.391], [460.391, 390.609]]))
# 결론
검정 결과 카이제곱 통계량은 106.437, p 값은 0.01 이하로 출력되었다. 따라서, A 쇼핑 고객들의 성별과 클레임 접수 여부는 연관성이 있다는 연구가설을 채택할 수 있다. 이는 성별에 따라 다른 방식의 고객 서비스를 제공함으로써 고객의 불만을 최소화시킬 방안을 모색해야 함을 시사한다.
3) 동질성 검정
서로 다른 모집단에서 독립적으로 추출한 표본들의 범주별 비율이 서로 동질적인지 검정하는 분석 방법이다. 앞서 다룬 독립성 검정은 분석의 기술적 방법과 동일한 분석 방법이지만, 사용목적에 따라 자료의 추출방법이나 문제의 접근방식, 해석이 달라진다. 독립성 검정은 하나의 표본에서 두 범주형 변수 A, B의 독립성을 검정한다면, 동질성 검정은 서로 다른 독립적인 표본에서 공통된 하나의 범주형 변수의 비율이 동질적인지를 검정한다. 따라서 동질성 검정 역시 다수의 표본을 구분하는 기준이 일종의 범주형 변수라고 볼 수 있다. 결국 2개의 범주형 변수에 대한 독립성 검정을 검정을 하는 것과 기술적으로 완전히 동일하다.
# 실습
A 쇼핑은 자사가 관리하는 구매유형 4가지의 비율이 '청년층 그룹'과 '중장년층 그룹'에 따라 동질적인지 검토하여 연령대별 마케팅 전략에 활용하고자 한다. 이를 위해 고객연령 그룹에 대한 구매유형 비율의 동질성 검정을 실시한다. 고객 연령대는 총 9개의 세부 그룹으로 이루어져 있으나, 39세 이하를 청년층 그룹으로, 40세 이상을 중장년층 그룹으로 분류하여 두 개의 다른 모집단에서 추출한 표본이라고 간주한다.


- H0 = 청년층과 중장년층 간의 구매유형 비율은 동일하다.
- H1 = 청년층과 중장년층 간의 구매유형 비율은 동일하지 않다.
독립성 검정 과정과 동일하나, 세분화된 9개의 연령대를 두 개의 그룹으로 분리하기 위해 데이터를 전처리해야 하기 때문에 과정에 조금 더 복잡도가 부여된다.
df['고객연령대'] = ''
df.고객연령대[df.고객_나이대 == 1] = '1'
df.고객연령대[df.고객_나이대 == 1] = '2'
df.고객연령대[df.고객_나이대 == 1] = '3'
df.고객연령대[df.고객_나이대 == 1] = '4'
df.고객연령대[df.고객_나이대 == 1] = '5'
df.고객연령대[df.고객_나이대 == 1] = '6'
df.고객연령대[df.고객_나이대 == 1] = '7'
df.고객연령대[df.고객_나이대 == 1] = '8'
df.고객연령대[df.고객_나이대 == 1] = '9'

고객_나이대 열을 고객연령대의 형태로 바꿔주었다.
df1 = df.loc[df['고객연령대'] == '1']
df2 = df.loc[df['고객연령대'] == '2']
df1_samp = df1.sample(200, random_state = 29, replace = True)
df2_samp = df2.sample(200, random_state = 29, replace = True)
df3 = df1_samp.append(df2_samp)
loc 메소드를 통해 랜덤으로 그룹을 (10대, 20대) 추출하고, 각 그룹 간 동질성 검정을 수행한다. 1000개의 표본을 갖고 있기 때문에, 임의로 200개의 샘플을 뽑기엔 각 표본의 샘플 수가 부족하다. replace = True로 설정함으로써 해결은 되었으나, 결과값이 다소 달라진 것을 알 수 있다.
X = pd.crosstabe(df3.고객연령대, df3.구매유형, margins = False)
X

stats.chi2_contingency(X)
# Chi2Contingency(statistic = 17.251839... p-value = 0.000627..., dof = 3,
# expected_freq = array([[ 11. , 51.5, 17. , 120.5], [11. , 51.5 , 17. , 120.5]]))
빈도교차표를 생성한 뒤, 카이제곱 동질성 검정을 거친다.
# 결론
검정 결과 카이제곱 통계량은 17.25... p값은 0.0006으로 도출되었다.
따라서 유의수준 95% 수준에서 A 쇼핑 고객들의 청년층과 중장년층의 구매유형 분포는 동질적이지 않다는 결론을 낼 수 있다. 빈도교차표를 보면, 청년층의 경우 실속 구매형(2), 집중 구매형(4)의 비중이 높으며, 중장년층의 경우 청년층보다 구매유형 별 편차가 크진 않지만, 명품 구매형의 비중이 상대적으로 높기 때문에 이를 고려한 마케팅 전략을 수립해야 한다.
"https://www.flaticon.com/kr/free-icons/-" 아이콘 제작자: paonkz - Flaticon