Çoklu Regresyon — Makine Öğrenimi Serisi 2

Uğur Can Çeribaşı
4 min readFeb 19, 2024

--

Bir önceki yazımda Lineer Regresyon için iki değişken arasındaki ilişkiyi modellemek için kullanılan bir yöntemdir şeklinde bir tanım yapmıştık. Peki ya birden fazla değişkenin bir bağımlı değişkeni nasıl etkilediğini modellemek istersek? İşte bu noktada Çoklu Regresyon devreye girer.

Çoklu Regresyon, birden fazla bağımsız değişkenin bir bağımlı değişkeni nasıl etkilediğini modellemek için kullanılan bir istatistiksel yöntemdir. Lineer Regresyon’a benzer şekilde, Çoklu Regresyon da bir doğrusal ilişki varsayar.

Y = β0 + β1X1 + β2X2 + ... + βnXn + ε

Burada:

  • Y: Bağımlı değişken
  • β0: Sabit terim
  • β1, β2, …, βn: Bağımsız değişkenlerin katsayıları
  • X1, X2, …, Xn: Bağımsız değişkenler
  • ε: Hata terimi

Katsayılar:

  • Her bir katsayı, bir bağımsız değişkenin, diğer değişkenler sabit tutulduğunda, bağımlı değişken üzerindeki etkisini gösterir.
  • Katsayılar, en küçük kareler yöntemi kullanılarak tahmin edilir.

Sabit Terim:

  • Sabit terim, tüm bağımsız değişkenlerin değeri sıfır olduğunda, bağımlı değişkenin beklenen değerini gösterir.

Çoklu Regresyon, Lineer Regresyon’a göre daha karmaşık bir yöntem olsa da, daha karmaşık ilişkileri modellemek için daha güçlü bir araçtır.

Şimdi bir önceki yazımızda da yaptığımız üzere kafamızda oturması adına bunları gerçek hayat üzerinden örneklendirelim.

Örnek 1 : Ev Fiyatları Tahmini

Diyelim ki, bir şehirdeki evlerin fiyatlarını etkileyen faktörleri (metrekare, oda sayısı, merkeze uzaklık, yaş) modellemek istiyoruz. Burada elimizde bu bilgilerin olduğu örnek bir csv dosyası oluşturalım.

ev_fiyatlari.csv

Metrekare,OdaSayisi,MerkezeUzaklik,Yas,Fiyat
120,3,5,10,300000
150,4,3,15,400000
90,2,7,20,200000
200,5,10,5,600000
80,2,2,30,180000
250,6,1,8,800000
110,3,6,12,280000
130,3,4,6,350000
160,4,9,3,450000
100,2,5,25,220000
180,4,2,7,500000
140,3,8,18,320000
190,5,3,12,550000
210,6,4,20,700000
75,2,6,5,160000
85,2,1,10,190000
220,5,7,14,650000
240,6,2,4,750000
170,4,8,1,420000
200,5,11,2,580000

Şimdi bu CSV’yi kullanarak nasıl çoklu regresyonu kod tarafında yapabileceğimize geçelim. Burada bağımsız değişkenler metrekare, oda sayısı, merkeze uzaklık ve yaş olacak. Bağımlı değişken ise bu kriterlere göre değişim gösteren fiyat değeri olacak. Python ile bunu koda dökelim.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# CSV dosyasını yükle
df = pd.read_csv('ev_fiyatlari.csv')

# Bağımsız değişkenler ve bağımlı değişkeni tanımla
X = df[['Metrekare', 'OdaSayisi', 'MerkezeUzaklik', 'Yas']]
y = df['Fiyat']

# Veriyi eğitim ve test setlerine ayır
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Modeli oluştur ve eğit
# Not: Çoklu Regresyon, birden fazla bağımsız değişken kullanılarak yapılan bir Lineer Regresyon türüdür.
# Bu nedenle, scikit-learn'de LinearRegression sınıfı hem Basit (tek değişkenli) hem de Çoklu (çok değişkenli) Regresyon için kullanılır.
model = LinearRegression()
model.fit(X_train, y_train)

# Test seti üzerinde tahmin yap
y_pred = model.predict(X_test)

# Modelin performansını değerlendir
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Modelin Ortalama Kare Hatası (MSE): {mse}")
print(f"Modelin R^2 Skoru: {r2}")

# Katsayıları ve sabit terimi yazdır
print("Katsayılar:", model.coef_)
print("Sabit terim (intercept):", model.intercept_)

Örnek 2: Reklamların Satışlara Etkisi Tahmini

Şimdi daha güncel ve hayatımızdan bir örnek ile devam edelim. Bir firmamız olduğunu düşünelim ve bu firma Instagram, Google ve Facebook reklamları veriyor olsun. Harcadığımız reklam bütçelerinin satışlara ne kadar etkisi olduğunu ölçecek bir çoklu regresyon modeli eğitelim.

reklam_kampanyasi.csv (her birim için mali veriler binlik olarak hazırlanmıştır.)

Google,Facebook,Instagram,Satışlar
130.1,85.5,60.0,300
120.8,75.3,45.5,260
150.5,60.4,55.0,320
180.8,88.4,64.0,360
200.0,70.3,54.0,400
130.8,98.5,49.0,340
120.3,85.6,65.2,290
175.7,65.9,70.0,385
140.5,55.8,60.3,330
210.8,80.3,59.5,410
190.4,90.5,55.6,390
220.5,85.1,75.0,430
225.8,87.2,62.5,440
250.3,70.8,58.3,480
275.5,65.3,64.5,500
260.4,60.3,72.5,470
230.1,75.5,68.0,425
245.2,55.9,60.0,450
265.2,60.5,62.0,460
270.3,80.2,69.7,490
285.6,75.1,66.5,510
290.4,70.6,63.3,530
295.8,85.5,68.8,550
310.2,90.5,74.2,570
320.5,85.2,69.7,580
330.8,88.2,64.5,600
340.5,95.1,79.3,610
350.7,80.5,75.0,620
360.9,85.0,70.4,630
370.8,78.9,72.0,640
380.3,94.3,80.6,650
390.0,99.5,85.1,660
400.5,95.2,89.5,670
410.8,85.5,90.0,680
420.7,75.1,95.5,690
430.6,80.3,100.2,700
440.5,85.7,105.0,710
450.8,89.6,110.0,720
460.6,90.5,115.3,730
470.3,95.2,120.5,740
480.7,100.3,125.0,750

Şimdi bu CSV dosyamızın kodunu yazarak yukarıdaki mantığı daha da pekiştirelim.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# CSV dosyasını yükle
df = pd.read_csv('reklam_kampanyasi.csv')

# Bağımsız değişkenler ve bağımlı değişkeni tanımla
X = df[['Google', 'Facebook', 'Instagram']]
y = df['Satışlar']

# Veriyi eğitim ve test setlerine ayır
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Modeli oluştur ve eğit
model = LinearRegression()
model.fit(X_train, y_train)

# Test seti üzerinde tahmin yap
y_pred = model.predict(X_test)

# Modelin performansını değerlendir
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Modelin Ortalama Kare Hatası (MSE): {mse}")
print(f"Modelin R^2 Skoru: {r2}")

# Katsayıları ve sabit terimi yazdır
print("Katsayılar:", model.coef_)
print("Sabit terim (intercept):", model.intercept_)

Bu kod, Google, Facebook ve Instagram reklam harcamalarının satışlar üzerindeki etkisini modellemek için kullanılır. Modelin katsayıları, her bir reklam platformunun satışlar üzerindeki etkisini gösterirken, R² skoru modelin açıklama gücünü ifade eder.

Bu yazımızda, Basit Lineer Regresyon ile Çoklu Regresyonun farklarını ele aldık. Ardından gerçek hayattan örnekler ile durumu örneklendirerek durumu daha da pekiştirdik.

Ancak, her modelleme tekniğinin kendi sınırlılıkları vardır ve bazen veri setimizdeki özelliklerin karmaşıklığı veya çoklu doğrusallık gibi sorunlar, modelimizin performansını olumsuz etkileyebilir. Bu tür durumlarla başa çıkmak için, modelimizi düzenleyerek daha sağlam ve genelleştirilebilir hale getirebiliriz. Peki, ama nasıl?

İşte bu sorunun cevabını bir sonraki yazımda detaylı bir şekilde ele alacağım. “Ridge ve Lasso Regresyonu: Aşırı Öğrenmeyi Önleme ve Model Genelleştirme — Makine Öğrenimi Serisi 3” başlıklı yazımda, bu iki güçlü düzenleme tekniğinin, regresyon modellerimizin aşırı öğrenmesini nasıl önleyebileceğini ve modelin genelleştirme kabiliyetini nasıl artırabileceğini inceleyeceğiz. Ridge ve Lasso regresyonunun, özellikle çok sayıda özelliğe sahip veri setlerinde ve özellikler arasında yüksek korelasyonun olduğu durumlarda nasıl faydalı olabileceğini göreceğiz. Ayrıca, bu yöntemlerin her birinin avantajları ve sınırlılıkları üzerinde duracak, hangi durumlarda hangi yöntemin tercih edilmesi gerektiğini tartışacağız.

Modelleme yolculuğumuzda bir sonraki adım olan Ridge ve Lasso regresyonu, veri bilimi ve makine öğrenmesi alanındaki araç çantamızı genişletecek önemli tekniklerden. Eğer modellerinizin daha sağlam ve güvenilir olmasını istiyorsanız, bir sonraki yazı çok önemli olacak. Konuyla ilgili sorularınız veya kafanıza takılan bir kısım olur ise Linkedin üzerinden ulaşmaya çekinmeyin. Okuduğunuz için teşekkür ederim.

--

--