예측하기

Python에서 statsmodels로 살펴보는 회귀 소개

Maarten Van den Broeck

Content Developer at DataCamp

물고기 데이터셋: 도미

bream = fish[fish["species"] == "Bream"]
print(bream.head())
  species  mass_g  length_cm
0   Bream   242.0       23.2
1   Bream   290.0       24.0
2   Bream   340.0       23.9
3   Bream   363.0       26.3
4   Bream   430.0       26.5

민물도미, _Abramis brama_

Python에서 statsmodels로 살펴보는 회귀 소개

질량 vs. 길이 그리기

sns.regplot(x="length_cm",
            y="mass_g",
            data=bream,
            ci=None)

plt.show()

도미 질량과 길이의 산점도와 선형 추세선. 점들은 모두 추세선에 가깝다.

Python에서 statsmodels로 살펴보는 회귀 소개

모델 실행

mdl_mass_vs_length = ols("mass_g ~ length_cm", data=bream).fit()

print(mdl_mass_vs_length.params)
Intercept   -1035.347565
length_cm      54.549981
dtype: float64
Python에서 statsmodels로 살펴보는 회귀 소개

예측할 설명값 데이터

설명 변수를 이렇게 두면,
반응 변수는 얼마가 될까요?

explanatory_data = pd.DataFrame({"length_cm": np.arange(20, 41)})
    length_cm
0          20
1          21
2          22
3          23
4          24
5          25
     ...
Python에서 statsmodels로 살펴보는 회귀 소개

predict() 호출

print(mdl_mass_vs_length.predict(explanatory_data))
0       55.652054
1      110.202035
2      164.752015
3      219.301996
4      273.851977
    ...
16     928.451749
17     983.001730
18    1037.551710
19    1092.101691
20    1146.651672
Length: 21, dtype: float64
Python에서 statsmodels로 살펴보는 회귀 소개

DataFrame에서 예측하기

explanatory_data = pd.DataFrame(
  {"length_cm": np.arange(20, 41)}
)

prediction_data = explanatory_data.assign( mass_g=mdl_mass_vs_length.predict(explanatory_data) )
print(prediction_data)
    length_cm         mass_g
0          20      55.652054
1          21     110.202035
2          22     164.752015
3          23     219.301996
4          24     273.851977
..        ...            ...
16         36     928.451749
17         37     983.001730
18         38    1037.551710
19         39    1092.101691
20         40    1146.651672
Python에서 statsmodels로 살펴보는 회귀 소개

예측 시각화

import matplotlib.pyplot as plt
import seaborn as sns
fig = plt.figure()
sns.regplot(x="length_cm",
            y="mass_g",
            ci=None,
            data=bream,)
sns.scatterplot(x="length_cm",
                y="mass_g",
                data=prediction_data, 
                color="red",
                marker="s")
plt.show()

도미 질량과 길이의 산점도와 선형 추세선. predict()로 계산한 점들을 표시했으며, 모두 추세선을 정확히 따른다.

Python에서 statsmodels로 살펴보는 회귀 소개

외삽

‘외삽’은 관측 범위를 벗어난 값에 대해 예측하는 것입니다.

little_bream = pd.DataFrame({"length_cm": [10]})

pred_little_bream = little_bream.assign(
    mass_g=mdl_mass_vs_length.predict(little_bream))

print(pred_little_bream)
   length_cm      mass_g
0         10 -489.847756

도미 질량과 길이의 산점도와 선형 추세선. 가상의 10 cm 도미와 그 예측 질량을 주석으로 표시했다.

Python에서 statsmodels로 살펴보는 회귀 소개

Ayo berlatih!

Python에서 statsmodels로 살펴보는 회귀 소개

Preparing Video For Download...