- 지도 학습과 비지도 학습의 개념
- 회귀 분석으로 예측 수행
- 시계열 데이터의 트렌드 예측
- 수학적 기법을 활용하여 평점을 예측
python-data-analysis/chapter1 at master · yoonkt200/python-data-analysis
<이것이 데이터 분석이다 - 파이썬 편, 한빛미디어>의 예제입니다. 독자 여러분의 의견을 수렴하여 상시 업데이트 진행중입니다. - yoonkt200/python-data-analysis
github.com
[회귀분석] 2024.11.20 - [Data Science/이론] - DS 이론09- 선형회귀분석
- 예측 분석의 가장 대표적인 방법
- 독립변수(X) 와 종속변수(Y) 간의 관계를 찾음
- 실제 데이터(점)와 거리가 최소가 되는 방정식(선)을 찾아내는 것 "Y = wX + b" -> 계수 w 와 b 를 잘 정하는 것
(ex) 아래 표 -> 방정식: Y = w1X1 + w2X2 + b
- 회귀분석은 표의 1~3 번의 데이터로 계수(w1, w2)를 추정하는 것
- 방정식의 계수를 추정하면 아직 알려지지 않은 ??? 데이터의 키를 예측할 수 있음
- 1~3 번의 데이터: 학습(train) 전용 데이터셋/ 4 번 데이터: 테스트(test) 전용 데이터셋
- 이러한 학습 방식이 '지도 학습' (답이 정해져 있는 것)
| index | X1 (나이) | X2 (몸무게) | Y (키) |
| 1 | 23 | 65.3 | 175.5 |
| 2 | 14 | 32.5 | 141.0 |
| 3 | 17 | 71.1 | 166.4 |
| 4 | 18 | 63.3 | ??? |
3.1 프로야구 선수의 다음 해 연봉 예측하기
1️⃣ 탐색: 프로야구 연봉 데이터 살펴보기
💠 데이터셋의 기본 정보
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
picher_df = pd.read_csv("picher_stats_2017.csv")
batter_df = pd.read_csv("batter_stats_2017.csv")
picher_df['연봉(2018)'].hist(bins = 100)

picher_df.boxplot(column=['연봉(2018)'])

💠 희귀 분석에 사용할 피처 살펴보기
- 각각의 피처들은 어떤 특성을 갖고 있는 지 확인
- '선수명','팀명'과 같이 그래프로 표현할 수 없는 피처를 제외하고, 수치형 피처의 분포를 확인
picher_features_df = picher_df.iloc[:, 2:] #2번째 column부터~
picher_features_df.head(5)

#한글 깨짐 방지
import matplotlib.pyplot as plt
plt.rc("font", family="Malgun Gothic")
#각 피처에 대한 히스토그램 출력
def plot_hist_each_column(df):
plt.rcParams['figure.figsize'] = [20,16]
fig = plt.figure(1)
for i in range(len(df.columns)):
ax = fig.add_subplot(5, 5, i+1)
plt.hist(df[df.columns[i]], bins = 50)
ax.set_title(df.columns[i])
plt.show()
plot_hist_each_column(picher_features_df)

- 각 feature 간의 단위가 다름 -> feature 의 정규화/ 스케일링이 되어있지 않은 데이터임을 알 수 있음
- Feature 의 정규화: 0~1 사이 or 상대적 값을 표현할 수 있는 수치로 맞춰주는 것이 Feature 스케일링
ex) 전체 데이터 내에서 상대적인 계산을 통해 키 150~180을 0~1 사이의 값으로 표현하고, 몸무게도 0~1 사이의 값으로 표현
2️⃣ 예측: 투수의 연봉 예측하기
💠Featrue 들의 단위 맞추기: Featrue Scaling
- 표준화는 정규분포에서의 z-값을 구하는 과정과 동일함
- z-값 : (X - X의 평균)/ X의 표준편차
#판다스 형태로 정의된 데이터를 출력할 때 float 모양으로 출력되게 해줍니다.
pd.options.mode.chained_assignment = None
#Feature 각각에 대한 Scaling을 수행하는 함수 정의
def standard_scaling(df, scale_colums):
for col in scale_colums:
series_mean = df[col].mean() # X의 평균
series_std = df[col].std() # X의 표준편차
df[col] = df[col].apply(lambda x: (x - series_mean) / series_std)
return df
scale_columns = picher_df.columns[2:]
#Feature 각각에 대한 Scaling을 수행
picher_scaling_df = standard_scaling(picher_df, scale_columns)
#column 명 변경
picher_scaling_df = picher_scaling_df.rename(columns={"연봉(2018)": "y"})
💠Feature 들의 단위 맞추기: One-Hot Encoding
- 연속형이 아닌 범주형 Feature 들도 정규화해야 함
- get_dummies() 함수 사용
team_encoding = pd.get_dummies(picher_scaling_df['팀명'])

picher_scaling_df = picher_scaling_df.drop('팀명', axis = 1)
# One-Hot Encoding 데이터를 이어붙임
picher_scaling_df = picher_scaling_df.join(team_encoding)

💠회귀 분석을 위한 학습, 테스트 데이터셋 분리
- train_test_split() 함수 사용
X_columns = picher_scaling_df.columns.difference(['선수명', 'y'])
X = picher_scaling_df[X_columns] # 독립변수
y = picher_scaling_df['y'] # 종속변수
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8, random_state=19)
💠회귀 분석 계수 학습 & 학습된 계수 출력
# 회귀 분석 계수를 학습 (회귀 모델 학습)
lr = linear_model.LinearRegression()
model = lr.fit(X_train, y_train)
# 학습된 계수를 출력
print(lr.coef_)

3️⃣ 평가: 예측 모델 평가하기
- 회귀 분석은 statsmodel 라이브러리의 OLS 클래스로도 실행이 가능하다
💠 어떤 피처가 가장 영향력이 강한 피처일까
~p150
- 저자
- 윤기태
- 출판
- 한빛미디어
- 출판일
- 2020.02.10
'Data Science > 실습' 카테고리의 다른 글
| pandas.Series.str 접근자와 정규표현식 (1) | 2025.02.03 |
|---|---|
| 이.데.분 01 - 탐색적 데이터 분석(EDA) (0) | 2025.02.02 |
| DataScience 예제 (1) | 2025.02.01 |
| 이.데.분 - 이것이 데이터 분석이다 with 파이썬 (0) | 2025.02.01 |
| KMeans와 Silhouette Score를 활용한 클러스터링 평가 (0) | 2024.12.14 |