Python'da basit doğrusal regresyon nasıl gerçekleştirilir (adım adım)
Basit doğrusal regresyon, tek bir açıklayıcı değişken ile tek bir yanıt değişkeni arasındaki ilişkiyi anlamak için kullanabileceğimiz bir tekniktir.
Bu teknik, verilere en iyi “uyan” çizgiyi bulur ve aşağıdaki formu alır:
ŷ = b 0 + b 1 x
Altın:
- ŷ : Tahmini yanıt değeri
- b 0 : Regresyon çizgisinin başlangıcı
- b 1 : Regresyon çizgisinin eğimi
Bu denklem açıklayıcı değişken ile yanıt değişkeni arasındaki ilişkiyi anlamamıza yardımcı olabilir ve (istatistiksel olarak anlamlı olduğu varsayılarak) açıklayıcı değişkenin değeri göz önüne alındığında bir yanıt değişkeninin değerini tahmin etmek için kullanılabilir.
Bu eğitimde Python’da basit doğrusal regresyonun nasıl gerçekleştirileceğine ilişkin adım adım bir açıklama sağlanmaktadır.
1. Adım: Verileri yükleyin
Bu örnekte 15 öğrenci için aşağıdaki iki değişkeni içeren sahte bir veri seti oluşturacağız:
- Belirli sınavlar için çalışılan toplam saat sayısı
- Sınav sonucu
Açıklayıcı değişken olarak saatleri ve yanıt değişkeni olarak muayene sonuçlarını kullanarak basit bir doğrusal regresyon modeli uydurmaya çalışacağız.
Aşağıdaki kod Python’da bu sahte veri kümesinin nasıl oluşturulacağını gösterir:
import pandas as pd #create dataset df = pd. DataFrame ({' hours ': [1, 2, 4, 5, 5, 6, 6, 7, 8, 10, 11, 11, 12, 12, 14], ' score ': [64, 66, 76, 73, 74, 81, 83, 82, 80, 88, 84, 82, 91, 93, 89]}) #view first six rows of dataset df[0:6] hours score 0 1 64 1 2 66 2 4 76 3 5 73 4 5 74 5 6 81
2. Adım: Verileri görselleştirin
Basit bir doğrusal regresyon modeli kurmadan önce, anlamak için öncelikle verileri görselleştirmemiz gerekir.
İlk olarak, saat ve puan arasındaki ilişkinin yaklaşık olarak doğrusal olmasını sağlamak istiyoruz çünkü bu, basit doğrusal regresyonun temel varsayımıdır .
İki değişken arasındaki ilişkiyi görselleştirmek için basit bir dağılım grafiği oluşturabiliriz:
import matplotlib.pyplot as plt plt. scatter (df.hours, df.score) plt. title (' Hours studied vs. Exam Score ') plt. xlabel (' Hours ') plt. ylabel (' Score ') plt. show ()
Grafikten ilişkinin doğrusal olduğunu görebiliriz. Saat sayısı arttıkça puan da doğrusal olarak artma eğilimindedir.
Daha sonra sınav sonuçlarının dağılımını görselleştirmek ve aykırı değerleri kontrol etmek için bir kutu grafiği oluşturabiliriz. Python, varsayılan olarak bir gözlemi, üçüncü çeyreğin (Q3) çeyrekler arası aralığın 1,5 katı üzerinde veya ilk çeyreğin (Q1) altındaki çeyrekler arası aralığın 1,5 katı olan bir gözlemi aykırı değer olarak tanımlar.
Bir gözlem aykırı ise kutu grafiğinde küçük bir daire görünecektir:
df. boxplot (column=[' score '])
Kutu grafiğinde küçük daireler yok, bu da veri setimizde aykırı değerlerin olmadığı anlamına geliyor.
Adım 3: Basit Doğrusal Regresyon Gerçekleştirin
Değişkenlerimiz arasındaki ilişkinin doğrusal olduğunu ve aykırı değerlerin olmadığını doğruladıktan sonra, açıklayıcı değişken olarak saatleri ve yanıt değişkeni olarak puanı kullanarak basit bir doğrusal regresyon modeli uydurmaya devam edebiliriz:
Not: Regresyon modeline uyum sağlamak için statsmodels kütüphanesindeki OLS() fonksiyonunu kullanacağız .
import statsmodels.api as sm #define response variable y = df[' score '] #define explanatory variable x = df[[' hours ']] #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.831 Model: OLS Adj. R-squared: 0.818 Method: Least Squares F-statistic: 63.91 Date: Mon, 26 Oct 2020 Prob (F-statistic): 2.25e-06 Time: 15:51:45 Log-Likelihood: -39,594 No. Observations: 15 AIC: 83.19 Df Residuals: 13 BIC: 84.60 Model: 1 Covariance Type: non-robust ==================================================== ============================ coef std err t P>|t| [0.025 0.975] -------------------------------------------------- ---------------------------- const 65.3340 2.106 31.023 0.000 60.784 69.884 hours 1.9824 0.248 7.995 0.000 1.447 2.518 ==================================================== ============================ Omnibus: 4,351 Durbin-Watson: 1,677 Prob(Omnibus): 0.114 Jarque-Bera (JB): 1.329 Skew: 0.092 Prob(JB): 0.515 Kurtosis: 1.554 Cond. No. 19.2 ==================================================== ============================
Model özetinden uygun regresyon denkleminin şöyle olduğunu görebiliriz:
Puan = 65,334 + 1,9824*(saat)
Bu, çalışılan her ek saatin ortalama 1,9824 puanlık sınav puanı artışıyla ilişkili olduğu anlamına gelir. Ve 65.334’ün orijinal değeri bize sıfır saat ders çalışan bir öğrencinin ortalama beklenen sınav puanını söylüyor.
Bu denklemi, öğrencinin ders çalıştığı saat sayısına göre beklenen sınav puanını bulmak için de kullanabiliriz. Örneğin 10 saat ders çalışan bir öğrencinin sınav puanının 85.158 olması gerekir:
Puan = 65,334 + 1,9824*(10) = 85,158
Model özetinin geri kalanını şu şekilde yorumlayabilirsiniz:
- P>|t| : Bu, model katsayılarıyla ilişkili p değeridir. Saatlere ilişkin p değeri (0,000) 0,05’ten anlamlı derecede küçük olduğundan saat ile puan arasında istatistiksel olarak anlamlı bir ilişkinin olduğunu söyleyebiliriz.
- R-kare: Bu sayı bize sınav puanlarındaki değişim yüzdesinin çalışılan saat sayısıyla açıklanabileceğini söyler. Genel olarak, bir regresyon modelinin R-kare değeri ne kadar büyük olursa, açıklayıcı değişkenler yanıt değişkeninin değerini o kadar iyi tahmin edebilir. Bu durumda puanlardaki değişimin %83,1’i çalışılan saatlerle açıklanmaktadır.
- F istatistiği ve p değeri: F istatistiği ( 63.91 ) ve karşılık gelen p değeri ( 2.25e-06 ) bize regresyon modelinin genel önemini, yani modeldeki açıklayıcı değişkenlerin varyasyonu açıklamada yararlı olup olmadığını anlatır. . yanıt değişkeninde. Bu örnekteki p değeri 0,05’ten küçük olduğundan modelimiz istatistiksel olarak anlamlıdır ve saatlerin puan değişimini açıklamada faydalı olduğu düşünülmektedir.
Adım 4: Artık Grafikler Oluşturun
Basit doğrusal regresyon modelini verilere yerleştirdikten sonra son adım, artık grafiklerin oluşturulmasıdır.
Doğrusal regresyonun temel varsayımlarından biri, bir regresyon modelinin artıklarının yaklaşık olarak normal dağıldığı ve açıklayıcı değişkenin her seviyesinde homoskedastik olduğudur. Bu varsayımların karşılanmaması halinde regresyon modelimizin sonuçları yanıltıcı veya güvenilmez olabilir.
Bu varsayımların karşılandığını doğrulamak için aşağıdaki kalan grafikleri oluşturabiliriz:
Artıkların ve uydurulmuş değerlerin grafiği: Bu grafik, eş varyanslılığın doğrulanması için kullanışlıdır. X ekseni takılan değerleri, y ekseni ise artıkları görüntüler. Artıklar grafik boyunca sıfır değeri etrafında rastgele ve düzgün bir şekilde dağılmış göründüğü sürece, eş varyanslılığın ihlal edilmediğini varsayabiliriz:
#define figure size fig = plt. figure (figsize=(12.8)) #produce residual plots fig = sm.graphics. plot_regress_exog (model, ' hours ', fig=fig)
Dört parsel üretilir. Sağ üst köşedeki, düzeltilmiş arsaya karşı kalan arsadır. Bu grafikteki x ekseni, tahmin değişkeni noktalarının gerçek değerlerini, y ekseni ise bu değere ilişkin artık değeri gösterir.
Artıkların sıfır etrafında rastgele dağılmış gibi görünmesi, değişen varyansın açıklayıcı değişkenle ilgili bir sorun olmadığını gösterir.
QQ grafiği: Bu grafik, artıkların normal bir dağılım takip edip etmediğini belirlemek için kullanışlıdır. Çizimdeki veri değerleri 45 derecelik açıyla kabaca düz bir çizgi izliyorsa veriler normal şekilde dağılır:
#define residuals res = model. reside #create QQ plot fig = sm. qqplot (res, fit= True , line=" 45 ") plt.show()
Kalıntılar 45 derece çizgisinden biraz sapıyor ancak ciddi endişe yaratacak kadar değil. Normallik varsayımının karşılandığını varsayabiliriz.
Artıklar normal dağılımlı ve homoskedastik olduğundan, basit doğrusal regresyon modelinin varsayımlarının karşılandığını doğruladık. Dolayısıyla modelimizin çıktısı güvenilirdir.
Bu eğitimde kullanılan Python kodunun tamamını burada bulabilirsiniz.