상세 컨텐츠

본문 제목

[K-DIGITAL] 파이썬을 활용한 기초 통계분석(2) 상관관계

PYTHON/K-DIGITAL

by ranlan 2021. 6. 22. 14:59

본문

728x90

멋쟁이사자처럼 X K-DIGITAL Training - 06.16

 

 

[이전]

2021.06.21 - [python/K-Digital] - [K-DIGITAL] 파이썬을 활용한 기초 통계분석(1) 빈도 분석과 이상치

 

[K-DIGITAL] 파이썬을 활용한 기초 통계분석(1) 빈도 분석과 이상치

멋쟁이사자처럼 X K-DIGITAL Training - 06.16 라이브러리 import pandas as pd import numpy as np import matplotlib.pyplot as plt # font from matplotlib import font_manager, rc # rc == run configure(con..

juran-devblog.tistory.com


 

 

라이브러리

import pandas as pd
import seaborn as sns

import scipy as sp
from scipy import stats # statistics

pandas  데이터 처리 및 분석 라이브러리로 행과 열로 이루어진 데이터 객체(DataFrame)를 만들어 다룰 수 있음

seaborn  matplotlib에 기반하여 제작된 파이썬 데이터 시각화 모듈

scipy  과학기술계산을 위한 라이브러리

 

 

 

이론

 

T검정(T-test)

두 변수 사이 비교를 위한 가장 기본적인 통계 분석법

두 집단 간 평균이 통계적으로 유의미한 차이를 보이고 있는지 검증할 때 사용되는 분석방법

 

 

카이제곱 검정(Chi-squre 검정)

두 범주형 변수 사이 관계가 있는지 없는지 검정 (독립성 검정)

범주형 자료의 집단간 동질성 여부를 통계적으로 검증하거나 두 변인간의 상관성을 통계적으로 검증하고자 할 때

 

 

귀무가설

- 표본 데이터를 사용하여 모집단에 대한 주장(귀무가설)의 타당성을 검정한다.

- 두 가지 현상 사이 관계가 없다.

- 독립변수는 종속변수에 대해 유의미한 영향을 미치지 않는다.

- independent

 

대립가설

- 검증하고자 하는 바, 귀무가설과 반대로 실험이나 연구를 통해 입증하려고 하는 주장

- 두 가지 현상 사이 연관관계가 있다.

- 독립변수는 종속변수에 중요한 영향을 미친다.

- not inpependent

 

P-VALUE

[조건부확률] 귀무가설이 참이라는 전제 하에 (두 현상 사이 관계가 없다는 전제 하에)

관찰이 완료된 값(통계치) 혹은 그보다 더 극단적인 값이 표본(샘플데이터)을 통해 나타날 확률

귀무가설을 지지하는 정도

귀무가설이 맞다고 가정할 때 얻은 결과보다 더 극단적인 결과가 관측될 확률

 

- p-value < 0.05(5%) 귀무가설 기각

- p-value >= 0.05(5%) 귀무가설 인정

 

 

* 주의

귀무가설을 기각한다는 것은 5% 만큼 귀무가설이 참일 가능성이 있다는 말이기도 함

귀무가설을 버린다해서 항상 대립가설(연구 결과가 참이거나 효과가 있다)이 맞다는 것은 아님

통계적으로만 유의미할 뿐 독립변수의 변화에 다른 종속변수의 변화값이 실질적/실용적인 의미를 갖진 않음

 


상관관계

두 변수가 어떤 선형적 또는 비선형적 관계르 가지고 있는지 분석

 

피어슨 상관계수

두 계량형 변수 사이 선형관계의 강도와 방향

-1에 가까울수록 음의 상관관계

1에 가까울 수록 양의 상관관계

0에 가까울수록 상관관계가 적음

 


 

 

분석 실습

 

1) 교차분석

df = pd.read_csv('data/cosmetics_.csv', encoding='utf-8')
df.head()

교차표 (crosstab)

- 빈도수

crosstab = pd.crosstab(df.propensity, df.skin, margins=True)
# margins=True 합계 값(All) 표시

# skin: 피부 타입
crosstab.columns = ["건성", "민감성", "중성", "지성", "여드름성", "합계"]
# propensity: 구매 성향
crosstab.index = ["비교적 저렴한 제품", "중간정도의 제품", "비교적고가의 제품", "합계"]

crosstab

- 합계가 1이 되도록 비율로 표현 (상대적인 비율 확인 가능)

pd.crosstab(df.propensity, df.skin, margins=True, normalize=True)

 

 

2) 독립표본 T 검정(t-test)

: 두 집단간의 평균차이 검정 예) 1반과 2반의 중간고사 영어과목 성적의 평균 차이

 

예시1) 남성과 여성의 화장품 만족도사이 연관관계 분석

df = pd.read_csv('data/cosmetics_.csv', encoding='utf-8')
df.head()

male = df[ df['gender']==1 ].satisf_al.values # 남성
female = df[ df['gender']==2 ].satisf_al.values # 여성
stats.ttest_ind(male, female)

>> Ttest_indResult(statistic=-0.494589803056421, pvalue=0.6213329051985961)

>> p-value가 0.05 이상으로 귀무가설 인정 (귀무가설이 참일 확률이 높음)

     → 서로 다른 성별 간 전반적인 만족도의  평균값 사이 유의미한 차이가 없다.

 

히스토그램

sns.distplot(male, kde=False, fit=stats.norm, hist_kws={'color': 'r', 'alpha': 0.2}, fit_kws={'color': 'r'})
sns.distplot(female, kde=False, fit=stats.norm, hist_kws={'color': 'g', 'alpha': 0.2}, fit_kws={'color': 'g'})

 

 

3) 대응표본 t-test 분석

: 동일한 모집단으로부터 추출된 두 변수의 평균값 비교 분석 예) 1반의 중간고사와 기말고사 영어 성적 평균 사이의 차이

 

예시1) 구매 가격에 대한 만족도와 구매 문의에 대한 만족도 사이 연관관계 분석

# satisf_b : 구매 가격에 대한 만족도 (5점 척도)
# satisf_i : 구매 문의에 대한 만족도 (5점 척도)
df[['satisf_b', 'satisf_i']].describe()

 

- 귀무가설: 구매 가격에 대한 만족도의 평균은 구매 문의에 대한 만족도의 평균과 차이가 없다.

- 대립가설: 구매 가격에 대한 만족도의 평균은 구매 문의에 대한 만족도의 평균과 차이가 있다.

 

t-test

stats.ttest_rel(df["satisf_b"], df["satisf_i"])

>> Ttest_relResult(statistic=-7.155916401026872, pvalue=9.518854506666398e-12)

>> p-value가 0.05 미만임으로 귀무가설 기각 (대립가설 인정)

    → 동일한 고객 집단이 평가한 구매 가격에 대한 만족도와 구매 문의에 대한 만족도의 평균값 사이 유의미한 차이가 있다.

 

히스토그램

sns.distplot(df["satisf_b"], kde=False, fit=stats.norm, hist_kws={'color': 'r', 'alpha': 0.2}, fit_kws={'color': 'r'})

sns.distplot(df["satisf_i"], kde=False, fit=stats.norm, hist_kws={'color': 'g', 'alpha': 0.2}, fit_kws={'color': 'g'})

 

 

4) 분산분석의 실습과 시각화 - ANOVA (Analysis of Variance)

# decision : 구매동기 (사회적 요인, 심리적 요인, 외모적 요인)
# satisf_al : 전반적인 만족도

decision_social = df[ df['decision']==1 ].satisf_al.values # 사회적 요인
decision_psychi = df[ df['decision']==2 ].satisf_al.values # 심리적 요인
decision_appear = df[ df['decision']==3 ].satisf_al.values # 외모적 요인

- 귀무가설: 구매동기에 따라 전반적인 만족도의 평균값에 차이가 없다.

- 대립가설: 구매동기에 따라 전반적인 만족도의 평균값 중 적어도 하나는 차이가 있다.

 

stats.f_oneway(decision_social, decision_psychi, decision_appear) 

>> F_onewayResult(statistic=4.732129410493065, pvalue=0.009632034309915485)

>> p-value가 0.05 미만임으로 대립가설 인정

    → 3가지 구매 동기에 따른 만족도의 평균값 중 적어도 하나는 유의미한 차이가 있다.

 

히스토그램

sns.distplot(decision_social, kde=False, fit=sp.stats.norm, hist_kws={'color': 'r', 'alpha': 0.2}, fit_kws={'color': 'r'})
sns.distplot(decision_psychi, kde=False, fit=sp.stats.norm, hist_kws={'color': 'g', 'alpha': 0.2}, fit_kws={'color': 'g'})
sns.distplot(decision_appear, kde=False, fit=sp.stats.norm, hist_kws={'color': 'b', 'alpha': 0.2}, fit_kws={'color': 'b'})

 

 

 

4) 상관관계 분석

 

예시1) 구매동기, 구매가격 만족도, 구매문의 만족도, 전반 만족도, 재구매의향 사이 상관관계

df_corr = df[['decision', 'satisf_b', 'satisf_i', 'satisf_al', 'repurchase']]
df_corr.corr()

상관관계 히트맵

sns.heatmap(df_corr.corr(), cmap='viridis')
plt.show()

여러 변수간 산점도 (pairplot)

sns.pairplot(df_corr)

 

예시2) 기본 제공 데이터셋 - Iris

iris = sns.load_dataset('iris')
iris.head()

상관관계

iris.corr()

여러 변수간 산점도

sns.set(style="ticks", color_codes=True)
sns.pairplot(iris, kind="reg")

728x90

관련글 더보기

댓글 영역