Post

데이터 분석 및 의미 찾기 | Data Analysis And Finding Meaning


KT 에이블스쿨 6기 데이터 분석 및 의미 찾기에 진행한 강의 내용 정리한 글입니다.

가설검정

  • 모집단: 우리가 알고 싶은 대상 전체 영역(전체 데이터)
  • 표본: 그 대상의 일부 영역(부분 데이터)
  • 모집단에 대한 가설 수립: x에 따라 y에 차이가 있는지, x와 y 사이에 관계가 있는지 → 표본을 가지고 가설을 검증(검정)
  • 비즈니스 이해단계: 관심사(y)를 도출하고 y에 영향을 주는 요인 x들을 선정한 후 이를 바탕으로 초기 가설 수립
 귀무가설(H₀)이 사실귀무가설(H₀)이 거짓
귀무가설(H₀)이 사실이라고 판정올바른 결정 (참 부정)1종 오류 (α, False Positive)
귀무가설(H₀)이 거짓이라고 판정2종 오류 (β, False Negative)올바른 결정 (참 긍정)
  • 귀무가설(H₀): 기존에 있던 가설
  • 대립가설(H₁): 기존에 있던 가설에 반대되는 가설

통계적 검정

  • 표본으로 대립가설을 확인하고 모집단에서도 맞을 것이라 가정
  • 분포 + 판단 기준 필요
  • 검정하기 위한 차이 값(검정통계량): $t$ 통계량, $\chi^2$ 통계량, $f$ 통계량
  • 각 통계량은 기준 대비 차이로 계산되며 그 분포를 통해 차이의 크기를 판단하고 이를 기반으로 p-value를 통해 손쉽게 평가할 수 있습니다.

이변량분석

이변량 분석

이변량분석

연속형 → 연속형

  • 시각화: 산점도를 사용하여 두 숫자형 변수의 관계를 나타내는 그래프(직선 관계 파악)
  • sns.pairplot(dataframe)을 사용하면 숫자형 변수들에 대한 산점도를 한꺼번에 그려주지만 변수와 데이터가 많다면 시간이 오래 걸리고 일일이 확인하기 쉽지 않습니다.
1
2
3
4
5
6
7
# Matplotlib
plt.scatter(df['x_column'], df['y_column'])
plt.scatter('x', 'y', data = df) 
# seaborn
sns.scatterplot(x='x', y='y', data=df)
# 산점도 한꺼번에 그리기 
sns.pairplot(dataframe)

상관계수

\[r = \frac{\frac{1}{n-1} \sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\left(\frac{1}{n-1} \sum (x_i - \bar{x})^2\right) \left(\frac{1}{n-1} \sum (y_i - \bar{y})^2\right)}}\]
  • 관계를 수치화: 상관계수(correlation cofficient)
  • 상관계수가 유의미한지를 검증(test): 상관분석
  • 상관관계를 나타내는 숫자: 공분산, 상관계수
  • 상관관계(r)는 두 변수간의 직선 관계가 얼마나 있는지에 대해 -1 ~ 1 사이의 값을 가집니다.
  • 상관계수는 분자 부분이 공분산으로 양의 상관관계거나 음의 상관계가 클수록 값이 커집니다.
1
2
import scipy.stats as spst
spst.pearsonr(df['columns_name1'], df['columns_name2'])
  • p-value(유의수준): 관계를 수치한 값(상관계수)이 유의미한지 판단하는 숫자
  • p-value < 0.05: 두 변수간의 관계가 있다.(상관계수가 의미 있다)
  • p-value ≥ 0.05: 두 변수간의 관계가 없다.(상관계수가 의미 없다)
1
df.corr()

상관관계는 직선의 관계(선형관계)만 수치화하므로 직선의 기울기, 비선형 관계를 고려하지 않습니다.

범주형 → 연속형

  • 평균 비교: barplot
  • 범주가 2개: 두 평균의 차이 비교
  • 범주가 3개 이상: 전체 평균과 각 범주의 평균비교
  • 두 평균의 차이가 크고 신뢰구간이 겹치지 않을 때 대립가설이 맞다고 볼 수 있습니다.
1
sns.barplot(x='x_column_name', y='y_column_name', data=df)

t-test, anova

범주가 두 개일 때와 세 개 이상일 때 평균을 비교하는 방법
범주형 x와 연속형 y의 관계를 검정하기 위한 도구
평균을 비교하여 차이 검정(testing)

t 통계량

  • 두 그룹의 평균 간 차이를 표준오차로 나눈 값
  • t 통계량의 분포
  • t 통계량이 유의한지 검정(T-test): t통계량(-2보다 작거나 2보다 크면 차이가 있다), p-value(0.05보다 작으면 차이가 있다)

    ANOVA
  • 여러 집단 간에 차이 비교: 기준은 전체 평균
  • 값이 대략 2~3 이상이면 차이가 있다고 판단합니다.
  • 분산분석은 전체 평균대비 각 그룹간 차이가 있는지만 알려주므로 어느 그룹간에 차이가 있는지는 알 수 없습니다.
\[F = \frac{\text{집단 간 분산}}{\text{집단 내 분산}}\]

범주형 → 범주형

  • 교차표 시각화(mosaic plot)를 통한 집계 - 모자이크 플롯
  • 모자이크 플롯은 범주별 양과 비율을 나타냅니다.
  • 아무런 관련이 없을 때의 교차표와 차이 비교(Chi-squared test)
1
2
3
4
5
# 교차표 
pd.crosstab(df['columns_name1'], df['columns_name2'], normalize=)

# 시각화 
mosaic(df, ['columns_name1', 'columns_name2'])

카이제곱검정

  • 기대빈도: 아무런 관련이 없을 때 나올 수 있는 빈도수
  • 카이제곱 통계량: 기대빈도와 실제 데이터의 차이
  • 카이제곱 통계량의 값이 클수록 차이가 크고, 자유도의 약 2배보다 크면 유의미한 차이가 있다고 판단합니다.
  • 범주형 변수의 자유도: 범주의 수 - 1
  • 자유도 계산: (x 변수의 자유도) × (y 변수의 자유도)

숫자형 → 범주형

  • sns.kdeplot()을 통한 시각화
  • common_norm=False 설정하면 각 면적이 1인 그래프
  • multiple='fill' 설정하면 모든 구간에 대한 100% 비율로 kdeplot 그림
    1
    
    sns.kdeplot(data=data['columns_name'])
    

    평균 추정과 신뢰구간

    분산, 표준편차

  • 분산(Var), 표준편차(SD): 한 집단을 설명하기 위해서 대표값으로 평균을 계산했을 때 값들이 평균으로부터 얼마나 벗어나 있는지를 나타내는 값(이탈도, deviation)
\[\sigma^2 = \frac{\sum (x - \bar{x})^2}{n} \qquad \sigma = \sqrt{\frac{\sum (x - \bar{x})^2}{n}}\]

표본평균으로 모평균을 추정하는 방법

  • 표본조사: 전체 데이터를 무작위로 조사하여 적절한 비용과 시간을 소요할 수 있으나 오차가 존재할 수 있습니다.
  • 전수조사: 전체(모집단)를 조사하여 정확성을 높일 수 있지만 비용과 시간이 많이 소요된다는 단점이 있습니다.
  • 표본을 뽑는 목적(표집 목적): 모집단 추정
  • 표본평균: 모 평균에 대한 추정치로 추정치에는 오차가 존재(표준오차)

중심극한정리

  • 중심극한정리: 무작위로 추출된 표본의 평균들이 정규분포에 가까워지는 정리
  • 표본의 데이터 수(표본의 크기) ≥ 30
  • 분포(평균들의 분포)의 평균: 모평균(𝜇)에 근사
  • 표본의 크기(n)가 클수록 정규분포 모양이 중심에 가까워지는 좁은 형태

표준오차

  • 모평균(𝜇) : 추정하고 싶은 정답
  • 표본평균(X) : 모평균에 대한 추정치(예측치)
  • 오차 (error): 모평균과 표본평균의 차이
  • 표준오차(standard error): 표본평균의 분포 표준편차

95% 신뢰구간

$ X̄ - 1.96 \times SE \leq \mu \leq X̄ + 1.96 \times SE $

  • 표준오차를 바탕으로 95% 확률 구간을 구할 수 있습니다.
  • 95% 신뢰구간: 신뢰구간안에 모평균이 포함될 확률 95%

95% 신뢰구간

95% 신뢰구간

시계열 데이터 분석 기초

  • 시계열 데이터: 데이터 분석 단위(행) 간에 시간 순서(sequence)가 있는 데이터로 시간의 흐름에 따른 패턴을 찾는게 중요
  • 시계열 데이터는 시간(시기)를 고려해야 합니다.
  • 전날 숫자가 다음날 숫자에 지대한 영향을 주었는지 고려해야 합니다.
  • 시간의 흐름에 따른 패턴 찾기: 라인차트, 시계열 데이터 분해, 자기상관성
  • 패턴을 데이터로 만들기: 날짜 요소 추출, 이전 데이터 만들기(.shift), 이동평균 만들기(.rolling), 차분 데이터(.diff)
This post is licensed under CC BY 4.0 by the author.