혼자 공부하는 데이터 분석 with 파이썬 요약 2

2025. 3. 8. 18:09DA 서적 정리

목차

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 사용법, 웹스크래이핑, 데이터 정제, 시각화, 가설검정, 머신러닝 등

다양한 기술을 가르쳐주지만 어느 하나 깊이 있는 것이 없다

가설검정과 머신러닝은 특히 더 그렇다

올인원 스킨처럼 하나의 책으로 이것저것 배우고 싶은 사람에게 적합하다

하지만 이 책을 끝내고 학습을 이어나가지 않으면

어디에도 써먹을 수 없을 것 같다