Adım adım regresyon, bir regresyon modelinde en alakalı öngörücü değişkenleri seçmek için güçlü bir tekniktir. İstatistiksel anlamlılığa bağlı olarak değişkenleri yinelemeli olarak ekleyerek veya çıkararak, yorumlanması daha kolay ve aşırı uyuma daha az eğilimli yalın modeller oluşturmaya yardımcı olur. Bu makale, statsmodels
, scikit-learn
(sklearn
) ve mlxtend
gibi popüler kütüphaneler kullanarak Python’da adım adım regresyon gerçekleştirmenin çeşitli yöntemlerini ele almaktadır.
İçindekiler Tablosu
- İleri Seçimi
- Geriye Eleme
- Adım Adım Seçim (Çift Yönlü)
statsmodels
ile Adım Adım Regresyonsklearn
ile Adım Adım Regresyonmlxtend
ile Adım Adım Regresyon- Doğru Yöntemi Seçme ve Hususlar
İleri Seçimi
İleri seçim, boş bir modelle başlar ve model uyumunu en anlamlı şekilde iyileştiren öngörücü değişkeni yinelemeli olarak ekler. Bu iyileştirme genellikle F-istatistik, AIC (Akaike Bilgi Kriteri) veya BIC (Bayes Bilgi Kriteri) gibi metrikler kullanılarak değerlendirilir. Başka bir değişken eklemenin istatistiksel olarak anlamlı bir iyileştirme sağlamaması durumunda işlem sona erer.
Geriye Eleme
Geriye eleme zıt bir yaklaşım benimser. Tüm öngörücü değişkenleri içeren bir modelle başlar ve yinelemeli olarak en az anlamlı değişkeni kaldırır. En yüksek p-değerine (veya en düşük F-istatistikine) sahip değişken, her adımda, çıkarılmasının model uyumunu önemli ölçüde kötüleştirmemesi koşuluyla kaldırılır. Kalan herhangi bir değişkenin çıkarılmasının modelin performansını önemli ölçüde düşürmesi durumunda işlem sona erer.
Adım Adım Seçim (Çift Yönlü)
Adım adım seçim, ileri ve geri seçimlerin güçlü yönlerini birleştirir. Boş bir modelle (ileri seçime benzer) veya tam bir modelle (geri elemeye benzer) başlar ve değişkenleri anlamlılıklarına bağlı olarak yinelemeli olarak ekler veya kaldırır. Bu, daha esnek ve potansiyel olarak optimal bir öngörücü alt kümesi sağlar.
statsmodels
ile Adım Adım Regresyon
statsmodels
yerleşik bir adım adım regresyon fonksiyonuna sahip değildir, ancak OLS
(Ordinary Least Squares) modelini kullanarak ileri seçimi manuel olarak uygulayabiliriz:
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Örnek veri
data = {'y': [10, 12, 15, 18, 20, 22, 25, 28, 30, 32],
'x1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'x2': [2, 4, 6, 8, 10, 12, 14, 16, 18, 20],
'x3': [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]}
df = pd.DataFrame(data)
def forward_selection(data, target, significance_level=0.05):
included = []
while True:
changed=False
excluded = list(set(data.columns)-set(included)-{target})
best_pvalue = 1.0
best_feature = None
for new_column in excluded:
model = sm.OLS(target, sm.add_constant(data[included+[new_column]])).fit()
pvalue = model.pvalues[new_column]
if pvalue < best_pvalue:
best_pvalue = pvalue
best_feature = new_column
if best_pvalue < significance_level:
included.append(best_feature)
changed=True
if not changed: break
return included
selected_features = forward_selection(df, df['y'])
print(f"Seçilen özellikler: {selected_features}")
final_model = sm.OLS(df['y'], sm.add_constant(df[selected_features])).fit()
print(final_model.summary())
sklearn
ile Adım Adım Regresyon
sklearn
, özellik seçimi için Özyinelemeli Özellik Eleme (RFE) kullanır. RFE, temel bir modelden (Doğrusal Regresyon gibi) önem puanlarına göre yinelemeli olarak özellikleri kaldırır:
from sklearn.linear_model import LinearRegression
from sklearn.feature_selection import RFE
from sklearn.model_selection import train_test_split
X = df.drop('y', axis=1)
y = df['y']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
rfe = RFE(model, n_features_to_select=2) # Gerektiği gibi ayarlayın
rfe = rfe.fit(X_train, y_train)
print(f"Seçilen özellikler: {X.columns[rfe.support_]}")
final_model = LinearRegression().fit(X_train[X.columns[rfe.support_]], y_train)
print(f"Test kümesinde R-kare: {final_model.score(X_test[X.columns[rfe.support_]], y_test)}")
mlxtend
ile Adım Adım Regresyon
mlxtend
‘in SequentialFeatureSelector
‘ı, ileri, geri veya adım adım seçim gerçekleştirmenin kullanışlı bir yolunu sağlar:
from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from sklearn.linear_model import LinearRegression
model = LinearRegression()
sfs = SFS(model, k_features='best', forward=True, floating=False, scoring='r2', cv=5) #ileri seçim
sfs = sfs.fit(X, y)
print(f"Seçilen özellikler: {list(sfs.k_feature_idx_)}")
final_model = LinearRegression().fit(X[X.columns[list(sfs.k_feature_idx_)]], y)
Doğru Yöntemi Seçme ve Hususlar
Adım adım regresyon yönteminin (ileri, geri veya adım adım) ve kullanılan kütüphanenin seçimi, belirli veri kümesine ve hedeflere bağlıdır. Şunları göz önünde bulundurun:
- Veri boyutu: Çok sayıda öngörücü değişken içeren durumlarda geriye eleme hesaplama açısından pahalı olabilir.
- Çoklu doğrusal bağlantı: Adım adım yöntemler, yüksek oranda ilişkili öngörücülerle mücadele edebilir.
- Yorumlanabilirlik ve tahmine dayalı doğruluk: Daha basit bir model (daha az değişken) biraz daha az doğru olsa bile, yorumlanması daha kolay olabilir.
- Çapraz doğrulama: Genellenebilirliği sağlamak için k-katlı çapraz doğrulama gibi teknikler kullanarak modelinizi her zaman doğrulayın.
Adım adım regresyon dikkatlice kullanılmalıdır. Yeni verilere iyi genellenemeyen kararsız modellere yol açabilir. Aşırı uyumu ele almak için düzenleme içeren LASSO veya Ridge regresyonu gibi diğer özellik seçimi yöntemlerini araştırmayı göz önünde bulundurun.