①※ 본 게시물은 인프런 강의 퇴근후딴짓 빅분기 실기 강의 내용을 토대로 정리했습니다.
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3) 강의 | 퇴근후딴짓 - 인프런
퇴근후딴짓 | 비전공자, 입문자가 빅데이터 분석기사 실기를 빠르게 취득할 수 있도록 안내해드려요! 꼭 필요한 파이썬, 판다스, 머신러닝을 다루고 있어요!, ❤️공지❤️ 7회 기출 유형 업데이
www.inflearn.com
가설검정 : 가설 참/거짓 판별(대립가설 채택여부)
개념 정리
- 시험에서는 표본이 주어짐다.
- 가설
- 귀무가설 ⇒ 기존에 알려진 사실
- 대립가설 ⇒ 우리가 증명하려는 것
- 검정 결과 ⇒ 검정 통계량, p-value
- p-value < 유의수준 0.05 : 대립가설 채택
- p-value > 0.05 : 귀무가설 채택
- 가설검정 프로세스
- 귀무가설/대립가설/유의수준 → 문제에서 주어짐
- 검정 통계량, p-value → 우리가 구할 것
단일 표본 검정 (모집단 1개)
- 예) 과자의 무게는 200g과 다른지 검정
① 정규성 검정 : shapiro(data)
② - 정규성 NO ) 비모수 검정 : wilcoxon(data - 기대값)
② - 정규성 YES ) 단일 표본 검정 : ttest_1samp(data, 기대값)
대응 표본 검정 (모집단-같은 집단 2개)
- 예) 신약 효과 (전후) 검정
① 정규성 검정 : shapiro(data1 - data2)
② - 정규성 NO ) 비모수 검정 : wilcoxon(data1, data2)
② - 정규성 YES ) 단일 표본 검정 : ttest_rel(data1, data2)
독립 표본 검정 (모집단)
- 예) 1반과 2반의 성적 차이 검정
① 정규성 검정 : shapiro(data1), shapiro(data2) → 둘다 만족해야함
② - 정규성 NO ) 비모수 검정 : mannwhitneyu(data1, data2)
② - 정규성 YES ) 등분산 검정 : levene(data1, data2)
③ - 등분산 NO ) 독립 표본 검정 : ttest_ind(data1, data2, equal_var = False)
③ - 등분산 YES ) 독립표본 검정 : ttest_ind(data1, data2)
단일 표본 검정
- 문제에서 집단이 1개여야함
① 문제에 정규성에 대해 언급을 안한다면 ⇒ 정규성 검정 진행 shapiro(data)
- 이때, pvalue값이 0.05보다 커야 정규성 만족, 작으면 불만족
stats.shapiro(df['무게'])
- 주의할 점!!! pvalue=2.2139254318709334e-10
⇒ 이거 0.05보다 큰게 아니야!! 0.05 대소 비교해서 false, true 파악하기
② 만약 정규분포를 만족하지 않는다면
- 비모수 검정 wilcoxon(data-기대값, alternative="") 진행
stats.wilcoxon(df['무게']-120)
- 만약 단측 검정이라면
- 대립가설 : 120g보다 작다
stats.wilcoxon(df['무게']-120, alternative = "less")
- 대립가설 : 120g보다 크다
stats.wilcoxon(df['무게']-120. alternative = "greater")
- 비모수 검정 수행후 pvalue 값에따라 대립가설 채택여부 확인
② 만약 데이터는 정규분포를 따른다고 나오면 → 비로 ttest진행
- 단일 표본 검정 : ttest_1samp(data, 기대값, alternative="")
- 문제에서 특정값이 아닌지 검증하라고 주어짐 ex) 무게가 120g이 아니다
print(stats.ttest_1samp(df['무게'], 120)) #두번째 매개변수에 기대값
-
- 출력값에서 p-value를 보고 대립가설 채택 여부 확인
- 양측검정 ex) 다르다 → alternative 생략 가능
stats.ttest_1samp(df['무게'], 120, alternative = 'two-sided')
-
- 단측검정 ex) ~보다 크다, ~보다 작다
- 기대값보다 크다 : alternative = ‘greater’
stats.ttest_1samp(df['무게'], 120, alternative = 'greater')
- 기대값보다 작다 : alternative = ‘less’
stats.ttest_1samp(df['무게'], 120, alternative = 'less')
- 기대값보다 크다 : alternative = ‘greater’
- 단측검정 ex) ~보다 크다, ~보다 작다
대응 표본 검정
- a = before - after의 평균
- a < 0 , 새로운 교육 프로그램은 효과가 있다! ⇒ 대립가설
① 정규성 체크
- stats.shapiro(data1 - data2)
stats.shapiro(df['before'] - df['after'])
#문제에서 before - after, after - before 인지 체크
- pvalue가 0.05보다 크면 정규성 만족, 음수면 정규성 불만족
② 정규성 X ⇒ 비모수 검정
- stats.wilcoxon(data1, data2, alternative ="")
stats.wilcoxon(df['before'], df['after'], alternative = "less")
② 정규성 O ⇒ 대응 표본 검정
- stats.ttest_rel(data1, data2, alternative="")
stats.ttest_rel(df['before'], df['after'], alternative = "less")
# 음수가 나와야 함!!
- 만약 a = after - before이고, a > 0 대립가설로 주어진다면
stats.ttest_rel(df['after'], df['before'], alternative = "greater")
독립 표본 검정
- 그룹 2개가 주어짐
① 정규성 체크
stats.shapiro(A)
stats.shapiro(B)
② 정규성 O → 등분산 검정
- 마찬가지로 pvalue값이 커야 등분산
stats.levene(A, B)
② 정규성 X → 비모수검정
stats.mannwhitneyu(A,B,alternative="")
③ 등분산 O → 독립표본 검정
- 처리집단 : 무언가를 적용 → A
- 대조집단 : 아무것도 적용 X → B
stats.ttest_ind(A,B,alternative="")
- A가 더 작다 → less
- A가 더 크다 → greater
③ 등분산 X → 독립표본 검정 equal_var = False
stats.ttest_ind(A,B,equal_var=False, alternative="")
범주형 데이터 분석 (카이제곱 검정) : 범주형 변수간 독립성
개념 정리
- 범주형 변수간 연관성, 독립성 확인
- ex) 성별에 따른 흡연 여부
적합도 검정
- 관찰도수와 기대도수 차이
- ex) 부산에서 찍먹이 60%, 부먹이 40%이란걸 알게되고 수원에서 관찰해서 관찰값과 기대값 비교
- 이때, 관찰값과 기대값은 빈도로 변경한다
- 관찰값 [a, b]
- 기대값 [0.6 * (a+b), 0.4 * (a+b)]
독립성 검정
- 두 변수가 독립적인지(연관성 있는지) 확인
- 교차표 테이블 생성
동질성 검정
- 두 개 이상 집단에서 동질성 갖는지…
적합도 검정 : stats.chisquare(관찰빈도, 기대빈도)
- 문제에서
- 기존 시험문제 적용 했을 때 점수 분포
- 60점미만 : 50%
- 60~70점 : 35%
- 80점 이상 : 15%
- 새로운 시험문제 추가 했을 때 관찰값
- 60점미만 : 150명
- 60~70점 : 120명
- 80점 이상 : 30명
- 이때, 기존 시험문제 유형과 새로운 시험 문제 유형은 점수에 차이가 있는지?
- 기존 시험문제 적용 했을 때 점수 분포
# 관찰값
ob = [150, 120, 30]
# 기대값
ex = [0.5 * 300, 0.35 * 300, 0.15 * 300]
# 적합도 검정 chisquare
stats.chisqaure(obs, ex)
독립성 검정 : stats.chi2_contingency(교차표테이블df)
- 문제에서… 빅데이터 실기 언어 선택에 따른 합격 여부 조사
- 교차표 데이터가 주어진 경우 ⇒ 데이터 프레임으로 만들기
- R : 합격 80명, 불합격 20명
- python : 합격 90명, 불합격 10명
import pandas as pd
df = pd.DataFrame(
{
"합격" : [80, 90],
"불합격" : [20, 10]
}, index = ['R','P']
)
# index 생략 가능
stats.chi2_contingency(df)
- 로우 데이터가 주어진 경우 ⇒ 보통 csv 파일로 주어질 것
- pd.crosstab(df[’변수1’], df[’변수2’])
data = pd.read_csv("data.csv")
df = pd.DataFrame(data)
df = pd.crosstab(df['언어'], df['합격여부'])
stats.chi2_contingency(df)
회귀 분석 ⇒ 수치형 변수 : 독립변수 ~ 종속변수
개념 정리
상관관계
- 두 변수 간 선형적인 관계 (0< 양, 0> 음, 0 관계없음)
- 피어슨 : df.corr()
- 스피어만 : df.corr(method=”spearman”)
- 켄달타우 : df.corr(method=”kendall”)
- t검정
- 피어슨 : stats.pearsonr(x, y)
- 스피어만 : stats.spearmanr(x, y)
- 켄달타우 : stats.kendalltau(x, y)
단순 선형 회귀 : 독립 변수 하나
- ols(’종속변수 ~ 독립변수’, data = df).fit() : 학습 진행
- model.summary() : 회귀 모델 통계적 요약
- model.predict(df) : 예측값
- pred = model.get_prediction(df) : 예측값, 예측값의 신뢰구간/예측구간
- pred.summary_frame(alpha=0.05)
- df[’잔차’] = df[’종속변수’] - model.predict(df)
다중 선형 회귀 : 독립 변수 여러개
- ols(’종속변수 ~ 독립변수1 + 독립변수2’, data = df).fit()
상관관계
- 두 변수간 상관관계를 보고 싶다면
df['키'].corr(df['몸무게'])
- 피어슨 상관계수
df.corr()
- 스피어만 상관계수
df.corr(method = "spearman")
- 켄달타우 상관계수
df.corr(method = "kendall")
- t검정 수행
- 피어슨
stats.pearsonr(df['키'], df['몸무게'])
- 스피어만
stats.spearmanr(df['키'], df['몸무게'])
- 켄달타우
stats.kendalltau(df['키'], df['몸무게'])
단순 선형 회귀 분석
- 주어진 키(종속)와 몸무게(독립)로 회귀 모델 구축 & 각 소문제를 구하시오
- 모델 학습 ⇒ summary 출력
from statsmodels.formula.api import ols
model = ols('키 - 몸무게', data = df).fit()
print(model.summary())
# R-squared: 결정계수
# Adj. R-squared: 수정 결정 계수
# coef : 회귀계수(기울기 ) , Intercept->절편
# t : 검정 통계량
# P>|t| : 각 계수에 대한 pvalue
# [0.025 0.975] : 신뢰구간
- 만약 몸무게가 50일 때 예측값을 구한다면
df = pd.DataFrame({'몸무게': : [50]})
model.predict(df)
- 잔차칼럼 추가
df['잔차'] = df['키'] - model.predict(df['몸무게'])
- 몸무게가 50일 때 예측키에 대한 신뢰구간, 예측구간 알고 싶다면
df = pd.DataFrame({'몸무게' : [50]})
pred = model.get_prediction(df)
pred.summary_frame(alpha = 0.05) # 95% 신뢰구간이므로, 90%면 0.1
다중 선형 회귀 분석
- 매출액(종속), 광고비, 플랫폼,투자(독립)
from statsmodels.formula.api import ols
model = ols('매출액 ~ 광고비 + 플랫폼', data = df).fit()
model.summary()
model.predict(newdf)
pred = model.get_prediction(newfd)
pred.summary_frame(alpha = 0.05)
로지스틱 회귀 분석
from statsmodels.formula.api import logit
import numpy as np
# 1) 로지스틱 회귀 모델 생성 및 학습
model = logit("gender ~ weight", data=train).fit()
print(model.summary())
# 2) 오즈비 계산
print(round(np.exp(0.0047),4))
print(round(np.exp(model.params['weight']),4))
'📘 Tech Learning > Pandas' 카테고리의 다른 글
📘 [Tech/Pandas] 빅데이터분석기사 - 작업형#2 정리 (0) | 2024.06.19 |
---|---|
📘 [Tech/Pandas] 빅데이터분석기사 - 작업형#1 정리 (1) | 2024.06.18 |