데이터 분석

[250407] 데이터타입별 검증법/상관계수, 회귀, 머신러닝 개요

경 민 2025. 4. 7. 20:46
👩🏻‍💻  Point of Today I LEARNED 
📌 SQL
● 코드카타 (50~60번 복습, ~136번)

📌 Python 
● 데이터 타입별 검증법, 상관계수 구하기 개념 확실하게 정리
● 라이브세션 3회차 복습 (실습)
● 통계학 기초 4주차
실무에 쓰는 머신러닝 1강

 

복습과 복습과 복습의 무한 루프 .. 

와중에 새로운 강의가 지급됐다.

< 머신러닝 기초 강의 >

궁금했던 개념이었어서 기대가 된다.

오늘은 일단 전체적인 개념 정립을 했고

내일부터는 본격적으로 세부적인 학습을 하게될 것같다.


1. SQL 

1-1. 코드카타 제한시간 두고 풀기

1) 코드카타 60번

Point : count(distinct ~ )

select 
    year(os.SALES_DATE) YEAR, 
    month(os.SALES_DATE) MONTH, 
    ui.GENDER GENDER,
    count(distinct ui.user_id) USERS  -- count(1)로 하면 안됨
from USER_INFO ui
join ONLINE_SALE os on ui.USER_ID = os.USER_ID
where ui.GENDER is not null
group by year(os.SALES_DATE), month(os.SALES_DATE), ui.GENDER
order by year(os.SALES_DATE), month(os.SALES_DATE), ui.GENDER
  • 처음에 count(1)로 했다가 틀렸다.
    • 이유 :  2025년 1월에 동일인물이 구매한 내역 모두 집계되기 때문에. 문제는 고유한 회원수를 요구함.

2. Python

2-1.  데이터 타입별 가설검증법, 상관계수 구하는 방법

 

연속형 ↔ 연속형 연속형 ↔ 범주형
(이분형)
연속형 ↔ 범주형
(3개 이상)
범주형 ↔ 범주형
(이분형)
범주형 ↔ 범주형
(3개 이상)
검증법 z-test
t-test
t-test ANOVA 카이제곱검정 카이제곱검정
상관계수 피어슨 point-biserial   파이(Phi) Cramer's V

2-2. 라이브세션 3회차 복습 (실습)

1) t-test

t, pvalue = stats.ttest_ind('컬럼명1','컬럼명2')
  • t값과 t값이 우연히 나올 확률 p-value를 동시에 반환
  • |t값|이 크고, 유의수준이 0.05일 때
    • 두 그룹간 차이가 크긴 한데
      • pvalue ≤ 0.05 ☞ t값이 우연히 나올 확률이 적다. ☞ 두 그룹간 차이가 큰 게 우연으로 보기 어렵다. ☞ 귀무가설 기각
      • pvalue > 0.05 ☞ t값이 우연히 나올 확률이 크다. ☞ 두 그룹간 차이가 큰 게 우연일 가능성이 높다. ☞ 귀무가설 채택

2) z-test

# statsmodels 모듈에서 ztest 함수 import
from statsmodels.stats.weightstats import ztest

# 모집단 평균(n)과 비교
z, pvalue = ztest(df['컬럼명'], value=n)
  • z값과 z값이 우연히 나올 확률 p-value를 동시에 반환
  • z값 : 표준편차
    • 해석 : 표본 평균이 모평균에서 z표준편차만큼 떨어져있다.
    • 신뢰도 95% (유의수준 0.05)일 때, z값 기준 : ±1.96
      • |z| ≥ 1.96 ☞ 모평균과 표본평균의 차이가 큰 건 우연으로 보기 어렵다. ☞ 귀무가설 기각
      • |z| < 1.96 ☞ 모평균과 표본평균의 차이가 작은 건 우연으로 보기 어렵다. ☞ 귀무가설 채택
  • 개념 확인
    • |z값|이 0에 가까울수록 표본오차가 거의 없다.
    • |z값|이 클수록 꼬리 영역에 위치해서 그 값이 나올 확률(p-value)이 줄어든다.

표준정규분포

⬇︎

이러한 이유로 |z값|과 유의수준에 따른 임계값을 비교해서

귀무가설 채택 여부를 판단할 수는 있지만

p-value 확인하는 것이 더 정확하고 안전하다.

 

3) 카이제곱검정

from scipy.stats import chi2_contingency

result = pd.crosstab(df['Gender'], df['Subscription Status']) # 빈도표 생성

chi2, p, dof, expected = chi2_contingency(result)
  • 카이제곱값(chi2), p-value, 자유도, 기대값을 동시에 반환
  • 카이제곱χ²값(chi2) : 기대빈도와 관찰빈도의 차이를 정량화한 값
    • χ² 값이 크다. ☞ 관찰빈도가 기대빈도에서 많이 벗어났다.
    • χ² 이 크고, 유의수준이 0.05일 때
      • p-value ≤ 0.05 ☞ 두 변수 간 차이가 큰 게 우연으로 보기 어렵다. ☞ 귀무가설 기각
      • pvalue > 0.05 ☞ 두 변수 간 차이가 큰 게 우연일 가능성이 높다. ☞ 귀무가설 채택

🧐 빈도표 생성
pd.crosstab(df['컬럼명1'],df['컬럼명2'], margins=True/False, normalize=True/'index')
: 두 개 이상의 범주형 데이터 간의 빈도수를 교차 분석하는 교차표(Contingency Table)를 만들어주는 함수
: 자동 피벗 ~
: 파라미터
1. margins : 행/열별 합계 추가 (all)
2. normalize : 비율 정규화 (True : 전체 데이터에서 각 조합이 차지하는 비율, index = 인덱스 기준 컬럼 비율 계산)

pd.crosstab(df['Gender'], df['Subscription Status'])
df.pivot_table(index='Gender', \
                columns='Subscription Status', \
                values='Customer ID', \
                aggfunc='count').fillna(0).astype(int)
두 코드 모두 동일한 결과 나옴

2-3. 통계학 기초 4주차

1) 회귀(Regression)

  • 독립변수(X)와 종속변수(Y) 간의 관계를 모델링하는 통계 기법
  • 회귀계수(=가중치, 파라미터), 절편(=편향)
  •  분류
    • 회귀계수의 선형/비선형 여부에 따라 선형회귀, 비선형회귀
    • 독립변수 개수에 따라 단순선형회귀, 다중선형회귀
단순선형회귀

  • 독립변수(X) 1개와 종속변수(Y)의 관계를 직선으로 모델링
  • X에 따른 Y값을 설명 및 예측
    • 예시) 현재 집행 중인 광고비로 매출을 예측
다중선형회귀

  • 2개 이상의 독립변수(X1, X2, ..., Xn)와 종속변수(Y)의 관계를 모델링
  • 여러 X들의 변화를 고려해서 Y값을 설명 및 예측
    • 예시) 다양한 매체별 매출 간의 관계설명 및 매출 예측 (라디오, tv, sns, ...), 키+ 나이로 몸무게 예측
  • 다중공선성의 문제
    • 독립변수들끼리 높은 상관관계를 가지는 경우, 개별 변수들의 고유한 효과를 예측하기 어려워짐
    • 해결 방법
      1. 높은 상관관계(0.7이상)를 가진 변수들 확인 및 제거
      2. 분산 팽창 계수(VIF) 계산해서 높은 계수 가진 변수 제거
      3. 주성분 분석(PCA)
다항회귀

 

  • 독립변수(X) n개와 종속변수(Y)의 비선형 관계를 모델링
    • 예시) 온도에 따른 아이스크림 판매량
  • X의 다항식을 사용하여 Y값을 예측
  • 고차 다항식의 경우 과적합 위험 (거시적인 경향성 파악에 집중해야 함)
스플라인회귀

 

  • 독립변수(X) n개와 종속변수(Y)의 '복잡한' 비선형 관계를 모델링
    • 예시) 주택 면적에 따른 가격 예측
  • 독립변수가 구간별로 불규칙한 패턴을 보일 때 각각 다른 회귀식을 사용
  • 적절한 매듭점(knots)의 선택이 중요

2) 데이터타입별 상관계수 구하기 (순서형 추가)

✅ 모수 상관계수 (피어슨)
  • 데이터가 정규분포를 따름 or
  • X와 Y가 모두 연속형 데이터
  • 서로 선형관계
비모수 상관계수 (스피어만, 켄달의 타우)
  • 데이터가 정규분포를 따르지 않음 or
  • X와 Y가 순서형 데이터
  • 서로 비선형 관계

 

피어슨 상관계수
  • 연속형 ↔ 연속형
  • 예시) 공부시간 - 시험 점수, 영업시간 - 매출
  • 코드  from scipy.stats import pearsonr
    • df.corr()
    • df.corr(method='pearson')
    • r, pvalue = pearsonr(df['컬럼명1'], df['컬럼명2']) 
      ☞ 상관계수, p-value 동시 반환
  • -1 ~ +1 사이의 값
스피어만 상관계수
  • 순서형 ↔ 순서형
  • 두 변수의 순위 간의 일관성 측정
  • 예시) 고객만족도 - 재구매 의도
  • 켄달의 타우 상관계수보다 데이터 내 편차와 에러에 민감
  • 코드  from scipy.stats import spearmanr
    • df.corr(method='spearman')
    • r, pvalue = spearmanr(df['컬럼명1'], df['컬럼명2']) 
  • -1 ~ +1 사이의 값
켄달의 타우 상관계수 
  • 순서형 ↔ 순서형
  • 순위 간 일치쌍 / 불일치쌍의 비율을 기준으로 계산
  • 예시) 키가 크고 몸무게 많이 나감 (일치쌍) / 키가 작은데 몸무게 많이 나감(불일치쌍)
  • 코드 from scipy.stats import kendalltau
    • df.corr(method='kendall')
    • r, pvalue = kendalltau(df['컬럼명1'], df['컬럼명2']) 
  • -1 ~ +1 사이의 값
상호정보 상관계수
  • 범주형 ↔ 범주형
  • 두 변수 간의 비선형 관계를 측정
  • 서로의 정보에 대한 불확실성을 줄이는 정도를 바탕으로 계산

3) 검증 시 주의 사항

  1. 재현가능성을 높이기 위해 p 해킹하지 말자.
  2. 선택적 보고 X (모든 결과 다 보고하거나 더 엄격한 추가실험 진행하기)
  3. 자료수집의 중단 시점을 미리 결정하자. (p해킹 방지)
  4. 분석할 데이터(탐색/학습데이터)는 검증 데이터와 따로 분리시키자. train / test
    • 과적합 방지
    • 검증의 공정성 향상
    • 일반화 성능 향상

2-4. 실무에 쓰는 머신러닝 기초 1강

1) 개념 정리

  • 머신러닝이란?
    • 인간의 개입 없이(혹은 최소한으로) 컴퓨터가 스스로 데이터를 학습해서 패턴/규칙을 찾아내고 이를 바탕으로 새로운 결과를 예측 및 분류하는 기술
    • 예시) 스팸 메일/문자 분류, 챗봇, 음성인식, 고객 세그먼트, 캠페인 성과 예측, 투자전략 자문 서비스 등
    • 인공지능(AI)의 일부

  • 머신러닝의 3대 요소
    1. 데이터 : 참고하는 정보의 모음
    2. 알고리즘 (모델) : 문제 해결을 위해 순서대로 처리하는 방법/규칙
    3. 컴퓨터파워 : 컴퓨터의 능력치 '얼마나 많은 일을 할 수 있는가'
  • 통계분석과의 차이
    • 통계분석
      • 변수들 간의 관계 파악 (서로 관련있나? ➜ 검정 / 얼마나 관련있나?  상관계수)
    • 머신러닝
      • 학습 데이터 기반으로 결과 예측에 집중 (얼마나 잘? 얼마나 정확하게?)
  • 머신러닝 학습종류

 

지도학습 (Supervised Learning)
  • 레이블 설명해줌. 이건 이렇게 생겼고 저건 저렇게 생겼어. (친절)

1️⃣ 분류

  • 어느 그룹에 속하는지 
  • 예시) 스팸여부, 대출 상환 가능여부, 주식 추천여부 등

2️⃣ 회귀

  • 결과를 숫자로 예측
  • 예시) 주택 가격, 적정 매수가격, 주가 예측 등
비지도학습 (Unsupervised Learning)
  • 레이블 설명 안해줌. 너가 알아서 특징 구별해서 분류해봐.

1️⃣ 군집화(클러스터링)

  • 비슷한 특성끼리 그룹핑
  • 예시) 고객 세그먼트, 문서 주제별 자동 분류, 중복 이미지 분류 등

2️⃣ 차원 축소

  • 많은 변수 때문에 복잡한 데이터를 핵심 정보만으로 재구성 (not 변수선택 but 데이터 압축/추출)
  • 대표적으로는 주성분 분석(PCA) 
  • 전처리, 시각화에 사용
강화학습

  • 에이전트가 환경과 상호작용하며 보상을 최대화하기 위한 전략으로 지속적으로 강화됨
    • 에이전트 : 학습 수행하는 주체 (게임 플레이어, 로봇 등)
    • 환경 : 에이전트가 움직이는 공간, 무대
    • 보상 : 에이전트가 잘 했을 때 받는 상점(칭찬), 잘 못했을 대 받는 벌점
  • 예시) 알파고, 게임 AI

2) 머신러닝 모델링 프로세스

데이터 수집 ▶ 전처리 ▶ 모델링 ▶ 성능평가 ▶ 최적화 ▶ 배포

 

① 데이터 수집

  • 웹 크롤링, 센서측정(제조업), 설문조사, DB 추출 등을 통해 양질의 데이터를 확보

② 전처리

  1. 결측치
    • 평균값, 최빈값, groupby값 등으로 대체 혹은 제거
    • 최대한 제거는 지양 (데이터 양 확보)
  2. 이상치
    • 데이터 범위에서 심하게 벗어난 값 처리
  3. 스케일링
    • 각각 다른 단위 쓰는 변수들의 값을 0~1 값으로 변환 (동일 기준으로 비교) - 정규화
    • 표준화 방법도 있음
  4. 범주형 변환
    • 순서형 
      • 사이즈(s,m,l,xl), 등급(1등급,2등급,3등급,..)
      • label encoding
    • 명목형
      • 지역, 성별, 선호브랜드 등
      • 이분형일 때는 0,1로 코딩하면 되지만 3개 이상일 경우 one-hot coding
pd.get_dummies(df, drop_first=True)
: one-hot coding (하나만 1이고 나머지는 0으로 변환) 해주는 함수
예시) 부산 = [1,0,0,0], 대전 = [0,1,0,0], 대구 = [0,0,1,0], 광주 = [0,0,0,1]

✳︎ 파라미터 drop_first=True
☞ (범주개수 - 1)개의 컬럼 추가 즉, 컬럼 개수 최소화☞ 다중공선성 문제 block

 

③ 모델링

  • 지도학습 ☞ 분류/회귀
  • 비지도학습 ☞ 클러스터링/차원 축소

④ 성능평가 ⭐️

  • 분류 ☞ Accuracy, Precision, Recall, F1-score, ROC-AUC 등
  • 회귀 ☞ MAE, RMSE, R² 등
  • 클러스터링 ☞ 실루엣 계수 등