혼자 공부하는 데이터 분석 with 파이썬 요약 2
2025. 3. 8. 18:09ㆍDA 서적 정리
목차
1. 가설검정
2. 머신러닝
1. 가설검정
# c++ 도서 데이터 프레임
cpp_df.head(3)

# 파이썬 도서 데이터 프레임
pyt_df.head(3)

print('파이썬 도서 대출건수 평균 :', np.mean(pyt_df['대출건수']))
print('C++ 도서 대출건수 평균 :',np.mean(cpp_df['대출건수']))

파이썬 도서 집단과 c++ 도서 집단의 평균은 통계적으로 다르다고 할 수 있는지 검정
귀무가설은 '평균이 서로 다르지 않다' 이며,
대립가설은 '평균이 서로 다르다' 이다
검정통계량은 다음과 같다

# 두 표본의 평균과 표준오차 계산
pyt_mean = np.mean(pyt_df['대출건수'])
cpp_mean = np.mean(cpp_df['대출건수'])
pyt_se = np.std(pyt_df['대출건수'], ddof=1) / np.sqrt(len(pyt_df))
cpp_se = np.std(cpp_df['대출건수'], ddof=1 )/ np.sqrt(len(cpp_df))
# 검정통계량 계산
t_value = (pyt_mean - cpp_mean) / np.sqrt(pyt_se**2 + cpp_se**2)
print('검정통계량 :', t)

# 정규분포의 95% 신뢰구간 하한과 상한 출력
print('t분포 신뢰구간 하한', stats.t.ppf(0.025, df = 338),
'\nt분포 신뢰구간 상한', stats.t.ppf(0.975, df = 338))
print('''
검정통계량은 2.4954이다
95% 신뢰구간의 상한을 초과하기 때문에
"두집단의 평균이 다르다" 라는 대립가설을 채택한다\n
''')
# p-value 계산
dof = len(pyt_df) + len(cpp_df) - 2 # 자유도
p_value = (1 - stats.t.cdf(t_value, df = dof)) * 2
print('p-value :', p_value)
print('''
두 집단의 평균이 같다는 가정하에(귀무가설)
검정통계량보다 더 극단적인 값이 나올 확률(유의확률)이 1.3%라는 것이다
두 집단에서 한번씩 뽑아 가설검증을 했는데
이렇게 극단적인 값이 나올확률은 매우 적으므로
유의수준 0.05 일때 두개의 집단의 평균은 통계적으로 유의미하게 다르다고 할 수 있다
'''
)

# 함수를 통해 가설검정 (이렇게 하는게 더욱 정확하고 편하다)
t, pvalue = stats.ttest_ind(pyt_df['대출건수'], cpp_df['대출건수'], equal_var=True)
print('검정통계량 :', t,'p-value :',pvalue)
print(''''
p-값이 다르게 나오는 이유는 자유도 계산방법 등
세부적인 계산이 다르기 때문이다
교재에서는 통계학을 제대로 배우는 책이 아니기 때문에
그냥 넘어가면 될 것 같다
'''
)

2. 머신러닝
선형회귀모델
# 선형 회귀 모델 훈련하기
# 선형 회귀 모델 라이브러리
from sklearn.linear_model import LinearRegression
# 학습 데이터 학습 피처와 타겟 설정
X_train = train_set[['도서권수']] # 피처는 데이터 프레임 형식이어야한다
y_train = train_set['대출건수'] # 타겟은 데이터 프레임이 아니어도 된다
# 학습
lr = LinearRegression()
lr.fit(X_train, y_train)
# 학습 점수
print('학습 결정계수', lr.score(X_train, y_train))
# 검증 데이터 학습 피처와 타겟 설정
X_test = test_set[['도서권수']]
y_test = test_set['대출건수']
# 학습 점수
print('검증 결정계수', lr.score(X_test, y_test))
# 회귀계수와 절편
print('\n회귀계수 :',lr.coef_,'\n절편 :', lr.intercept_)

로지스틱 회귀모델
# 로지스틱 회귀모델
# 평균보다 높은 데이터 1 낮은 데이터 0으로 해서 타겟값으로 설정
borrow_mean = ml_df['대출건수'].mean()
y_train_c = y_train > borrow_mean
y_test_c = y_test > borrow_mean
# 로지스틱 회귀 모델 라이브러리
from sklearn.linear_model import LogisticRegression
# 학습
logr = LogisticRegression()
logr.fit(X_train, y_train_c)
# 학습 점수
print('정답 비율',logr.score(X_test, y_test_c))

# 검증 데이터의 타겟 비율은 1이 69.2% 이다
# 모든 데이터를 1로 예측해도 69.2% 는 정확하게 예측한다는 것이다
# 그러므로 위의 71%의 결과는 그리 높은 점수가 아니다
print('검증 데이터 타겟의 1 비율', round(y_test_c.value_counts().iloc[0] / len(y_test_c),3))
print('\n검증 데이터의 타겟 분포 ')
print(y_test_c.value_counts())

책 후기
API 사용법, 웹스크래이핑, 데이터 정제, 시각화, 가설검정, 머신러닝 등
다양한 기술을 가르쳐주지만 어느 하나 깊이 있는 것이 없다
가설검정과 머신러닝은 특히 더 그렇다
올인원 스킨처럼 하나의 책으로 이것저것 배우고 싶은 사람에게 적합하다
하지만 이 책을 끝내고 학습을 이어나가지 않으면
어디에도 써먹을 수 없을 것 같다
'DA 서적 정리' 카테고리의 다른 글
웹 크롤링 & 데이터 분석 with 파이썬 요약 1 (1) | 2025.03.12 |
---|---|
혼자 공부하는 데이터 분석 with 파이썬 요약 1 (0) | 2025.03.08 |
Do it! - 데이터 분석을 위한 판다스 입문 요약 2 (0) | 2025.02.27 |
Do it! - 데이터 분석을 위한 판다스 입문 요약 1 (0) | 2025.02.26 |