Kompletny przewodnik po regresji liniowej w pythonie
Regresja liniowa to metoda, której możemy użyć do zrozumienia związku między jedną lub większą liczbą zmiennych predykcyjnych a zmienną odpowiedzi.
W tym samouczku wyjaśniono, jak przeprowadzić regresję liniową w języku Python.
Przykład: regresja liniowa w Pythonie
Załóżmy, że chcemy wiedzieć, czy liczba godzin spędzonych na nauce i liczba zdanych egzaminów próbnych wpływają na ocenę, jaką student otrzymuje z danego egzaminu.
Aby zbadać tę relację, możemy wykonać następujące kroki w Pythonie, aby przeprowadzić wielokrotną regresję liniową.
Krok 1: Wprowadź dane.
Najpierw utworzymy ramkę DataFrame pandy do przechowywania naszego zestawu danych:
import pandas as pd #create data df = pd.DataFrame({'hours': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6, 5, 3, 4, 6, 2, 1, 2], 'exams': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2, 4, 4, 4, 5, 1, 0, 1], 'score': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96, 90, 82, 85, 99, 83, 62, 76]}) #view data df hours exam score 0 1 1 76 1 2 3 78 2 2 3 85 3 4 5 88 4 2 2 72 5 1 2 69 6 5 1 94 7 4 1 94 8 2 0 88 9 4 3 92 10 4 4 90 11 3 3 75 12 6 2 96 13 5 4 90 14 3 4 82 15 4 4 85 16 6 5 99 17 2 1 83 18 1 0 62 19 2 1 76
Krok 2: Wykonaj regresję liniową.
Następnie użyjemy funkcji OLS() z biblioteki statsmodels do przeprowadzenia zwykłej regresji metodą najmniejszych kwadratów, używając „godzin” i „egzaminów” jako zmiennych predykcyjnych oraz „wyniku” jako zmiennej odpowiedzi:
import statsmodels.api as sm #define response variable y = df['score'] #define predictor variables x = df[['hours', 'exams']] #add constant to predictor variables x = sm.add_constant(x) #fit linear regression model model = sm.OLS(y, x).fit() #view model summary print(model.summary()) OLS Regression Results ==================================================== ============================ Dept. Variable: R-squared score: 0.734 Model: OLS Adj. R-squared: 0.703 Method: Least Squares F-statistic: 23.46 Date: Fri, 24 Jul 2020 Prob (F-statistic): 1.29e-05 Time: 13:20:31 Log-Likelihood: -60.354 No. Observations: 20 AIC: 126.7 Df Residuals: 17 BIC: 129.7 Df Model: 2 Covariance Type: non-robust ==================================================== ============================ coef std err t P>|t| [0.025 0.975] -------------------------------------------------- ---------------------------- const 67.6735 2.816 24.033 0.000 61.733 73.614 hours 5.5557 0.899 6.179 0.000 3.659 7.453 exams -0.6017 0.914 -0.658 0.519 -2.531 1.327 ==================================================== ============================ Omnibus: 0.341 Durbin-Watson: 1.506 Prob(Omnibus): 0.843 Jarque-Bera (JB): 0.196 Skew: -0.216 Prob(JB): 0.907 Kurtosis: 2,782 Cond. No. 10.8 ==================================================== ============================
Krok 3: Interpretacja wyników.
Oto jak zinterpretować najbardziej odpowiednie liczby w wyniku:
R do kwadratu: 0,734 . Nazywa się to współczynnikiem determinacji. Jest to proporcja wariancji zmiennej odpowiedzi, którą można wyjaśnić za pomocą zmiennych predykcyjnych. W tym przykładzie 73,4% różnic w wynikach egzaminów można wytłumaczyć liczbą godzin nauki i liczbą zdanych egzaminów przygotowawczych.
Statystyka F: 23,46 . Jest to ogólna statystyka F modelu regresji.
Prawdopodobne (statystyka F): 1,29e-05. Jest to wartość p powiązana z ogólną statystyką F. To mówi nam, czy model regresji jako całość jest statystycznie istotny, czy nie. Innymi słowy, mówi nam, czy dwie zmienne predykcyjne łącznie mają statystycznie istotny związek ze zmienną odpowiedzi. W tym przypadku wartość p jest mniejsza niż 0,05, co wskazuje, że zmienne predykcyjne „godziny nauki” i „zdane egzaminy przygotowawcze” łącznie mają statystycznie istotny związek z wynikiem egzaminu.
coef: Współczynniki każdej zmiennej predykcyjnej mówią nam o oczekiwanej średniej zmianie zmiennej odpowiedzi, przy założeniu, że druga zmienna predykcyjna pozostaje stała. Na przykład za każdą dodatkową godzinę spędzoną na nauce średni wynik egzaminu powinien wzrosnąć o 5,56 , przy założeniu, że liczba zdanych egzaminów praktycznych pozostanie stała.
Spójrzmy na to z innego punktu widzenia: jeśli Student A i Student B zdają tę samą liczbę egzaminów przygotowawczych, ale Student A uczy się o godzinę dłużej, wówczas Student A powinien uzyskać o 5,56 punktu więcej niż uczeń B.
Interpretujemy współczynnik przechwytywania w ten sposób, że oczekiwany wynik egzaminu dla studenta, który nie studiuje i nie przystępuje do egzaminów przygotowawczych, wynosi 67,67 .
P>|t|. Poszczególne wartości p mówią nam, czy każda zmienna predykcyjna jest istotna statystycznie, czy nie. Widzimy, że „godziny” są istotne statystycznie (p = 0,00), natomiast „egzaminy” (p = 0,52) nie jest istotna statystycznie przy α = 0,05. Ponieważ termin „egzaminy” nie jest istotny statystycznie, może się okazać, że zdecydujemy się na usunięcie go z modelu.
Szacowane równanie regresji: Możemy użyć współczynników z wyników modelu, aby utworzyć następujące szacunkowe równanie regresji:
wynik egzaminu = 67,67 + 5,56*(godziny) – 0,60*(egzaminy przygotowawcze)
Możemy użyć tego szacunkowego równania regresji do obliczenia oczekiwanego wyniku egzaminu dla studenta na podstawie liczby godzin nauki i liczby egzaminów praktycznych, które zdają. Przykładowo, student studiujący trzy godziny i przystępujący do egzaminu przygotowawczego powinien otrzymać ocenę 83,75 :
Należy pamiętać, że ponieważ poprzednie badania przygotowawcze nie były istotne statystycznie (p = 0,52), możemy podjąć decyzję o ich usunięciu, gdyż nie wnoszą one żadnej poprawy w stosunku do całego modelu. W tym przypadku moglibyśmy przeprowadzić prostą regresję liniową, wykorzystując jedynie badane godziny jako zmienną predykcyjną.
Krok 4: Zweryfikuj założenia modelu.
Po przeprowadzeniu regresji liniowej warto sprawdzić kilka założeń, aby upewnić się, że wyniki modelu regresji są wiarygodne. Założenia te obejmują:
Założenie nr 1: Istnieje liniowa zależność pomiędzy zmiennymi predykcyjnymi a zmienną odpowiedzi.
- Sprawdź to założenie, generując wykres reszt , który wyświetla dopasowane wartości w stosunku do reszt dla modelu regresji.
Hipoteza nr 2: Niezależność reszt.
- Zweryfikuj tę hipotezę, wykonując test Durbina-Watsona .
Hipoteza nr 3: Homoscedastyczność reszt.
- Zweryfikuj tę hipotezę, wykonując test Breuscha-Pagana .
Założenie nr 4: Normalność reszt.
- Wizualnie zweryfikuj to założenie za pomocą wykresu QQ .
- Zweryfikuj tę hipotezę za pomocą testów formalnych, takich jak test Jarque-Bera lub test Andersona-Darlinga .
Założenie nr 5: Sprawdź, czy nie ma współliniowości pomiędzy zmiennymi predykcyjnymi.
- Sprawdź tę hipotezę, obliczając wartość VIF każdej zmiennej predykcyjnej.
Jeśli te założenia zostaną spełnione, można mieć pewność, że wyniki modelu regresji liniowej wielokrotnej są wiarygodne.
Pełny kod Pythona użyty w tym samouczku znajdziesz tutaj .