Certificate/data analytics-Google

[linear regression] Python, check assumptions

Olivia-BlackCherry 2023. 7. 22. 23:26

목차

    아래는 TV, Radio, Social_media로 지불하는 광고비와 이때의 판매량(Sales)에 관한 데이터이다.

    어떤 변수가 판매량에 영향을 미치는가에 대해 분석하고자 한다.

     

     

     

    1. 라이브러리

    - 기본

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns

    - 통계관련

    # Import the statsmodel module.
    import statsmodels.api as sm
    
    # Import the ols function from statsmodels.
    from statsmodels.formula.api import ols

     

     

     

    2. EDA: Y변수인 Sales의 distribution을 visualize해보자

    fig = sns.histplot(data['Sales'])
    fig.set_title('Distribution of Sales');

    ---> sales는 25부터 360 정도 사이의 값을 갖는다.

     

     

     

    3. 모델 building

    1) pairplot

    pairplot으로 변수 간에 관계가 있는지 확인해보자.

    sns.pairplot(data);

    ---> TV와 Sales가 가장 강한 선형 관계가 있고, Radio도 있기는 하지만 그 강도가 약하다.

     

     

    2) OLS 모델만들기

    ols formula : Y변수 ~ X변수 

    ols_formula = 'Sales ~ TV'

     

    ols 함수로 OLS 모델만들기

    OLS = ols(formula = ols_formula, data = data)

     

    모델 학습시키기

    model = OLS.fit()

     

    결과 

    model_results = model.summary()

     

     

     

    4. Model assumption 

    이 선형회귀모델의 효용성을 입증하기 위해서 4가지 가설을 확인해야 한다. 

     

    1) Linearity assumption

    두 변수 사이에 선형 관계가 있는지 확인한다. 

    sns.scatterplot(x = data['TV'], y = data['Sales']);

    ----> 충족한다.

     

     

    2) Normality assumption

    오차가 정규분포를 이뤄야한다는 가정이다. 

    두 가지 그래프로 입증할 수 있다.

     

    우선 잔차는 아래와 같다. 

    residuals = model.resid

     

    두 그래프를 한 화면에 놓아보자.

    fig, axes = plt.subplots(1, 2, figsize = (8,4))

     

    첫 번째 그래프는 히스토그램이다. 

    sns.histplot(residuals, ax=axes[0])
    axes[0].set_xlabel("Residual Value")
    axes[0].set_title("Histogram of Residuals")

     

    두 번째 그래프는 qqplot이다.

    sm.qqplot(residuals, line='s',ax = axes[1])
    axes[1].set_title("Normal Q-Q plot")

     

    tight_layout() 함수로 두 그래프 간 공백을 준다. 

    plt.tight_layout()

     

    그래프를 띄운다.

    plt.show()

    ----> 정상성도 만족한다는 것을 알 수 있다.

     

     

    3) Homoscedasticity assumption

    잔차가 x 변수의 모든 값에 대해 동일한 분산을 가져야 한다는 것이다.

    fitted value와 residuals에 대한 scatterplot을 그리고, y=0 선 하나를 그려서 y=0을 축으로 잔차의 분산이 어떻게 시각화되는지 살펴보자.

    # 모델의 예측값, 모델의 잔차에 대한 scatterplot을 그린다.
    fig = sns.scatterplot(x = model.fittedvalues, y = model.resid)
    fig.set_xlabel("Fitted Values")
    fig.set_ylabel("Residuals")
    fig.set_title("Fitted Values v. Residuals")
    
    # y=0 선 하나를 그린다. 
    fig.axhline(0)
    
    #plt.show()

    ----> 잔차의 분산이 X값에 대해 일치하기 때문에 가정에 맞다.

     

     

    4) Indepence assumption

    각각의 관찰된 값이 모두 독립적으로 상호 영향을 미치지 않기 때문에 가정을 만족한다.

     

     

     파이썬으로 통계공부하기, 회귀분석 가정 확인하기