← Modül 4

OLS: Makine Öğreniminin Kalp Atışı

En Küçük Kareler Yöntemi (OLS), regresyonun temel taşıdır. Veri noktalarına "en yakın" çizgiyi nasıl bulduğumuzu keşfedin.

⚡ Hızlı Özet: OLS Nedir?

Amaç
En iyi uyum çizgisini bulmak
Yöntem
Hata karelerini minimize etmek
Çıktı
β₀ (kesim) ve β₁ (eğim)

β₀ - Kesim Noktası

X=0 olduğunda Y'nin aldığı temel değer. "Başlangıç noktası" olarak düşünün.

β₁ - Eğim

X'teki 1 birimlik değişimin Y'de ne kadar değişime yol açtığını gösterir.

ε - Hata Terimi

Modelin açıklayamadığı rastgele varyasyon. "Gürültü" olarak düşünün.

🎯 SEZGİSEL ANLATIM: OLS NASIL ÇALIŞIR?

🤔 PROBLEM: En İyi Çizgiyi Bulmak

Elimizde dağınık noktalar var ve bunlara en uygun düz çizgiyi çizmek istiyoruz.

Her noktanın çizgiden bir uzaklığı (hata) var
Bazı noktalar çizginin üstünde, bazıları altında
Amacımız: Toplam hatayı mümkün olduğunca küçültmek

💡 ÇÖZÜM: Karelerin Toplamını Minimize Etmek

OLS şu akıllı fikri kullanır: "Hataların karelerinin toplamını en küçük yapan çizgiyi bulalım!"

Neden kare? → Tüm hataları pozitif yapmak
Büyük hataları cezalandırmak → Kare alınca büyük hatalar daha fazla cezalandırılır
Matematik bize en iyi β₀ ve β₁'i verir → Optimizasyon çözülebilir!

📐 MATEMATİKSEL TEMEL

Doğrusal Regresyon Modeli

y = β₀ + β₁x + ε
β₀ = kesim noktası (intercept)
β₁ = eğim (slope)
x = bağımsız değişken
ε = hata terimi

OLS Amacı: Hata Kareleri Toplamını Minimize Et

min Σ(yᵢ - ŷᵢ)²
yᵢ = gerçek değer, ŷᵢ = tahmin edilen değer

Hatırlatma: Bu formül "En Küçük Kareler" isminin kaynağıdır. Hataların karelerini alıp topluyoruz ve bu toplamı minimize ediyoruz.

β₁ (Eğim) Formülü

β₁ = Σ[(xᵢ - x̄)(yᵢ - ȳ)] / Σ(xᵢ - x̄)²
Pay: X ve Y'nin ortalamalardan ne kadar saptığının çarpımı (kovaryans)
Payda: X'in ortalamadan sapmalarının karesi (varyans)

β₀ (Kesim) Formülü

β₀ = ȳ - β₁x̄
ȳ: Y'nin ortalaması (hedef değişken)
x̄: X'in ortalaması (açıklayıcı değişken)
β₁x̄: Eğimin ortalama X üzerindeki etkisi

🏠 GERÇEK HAYAT ÖRNEKLERİ

📈 Ev Fiyat Tahmini

X (Bağımsız): Metrekare
Y (Bağımlı): Fiyat
β₀: Temel arsa değeri (metrekare=0 iken fiyat)
β₁: Metrekare başına fiyat artışı

Örnek: β₀ = 50,000 TL, β₁ = 2,000 TL/m²
"Metrekare arttıkça fiyat 2,000 TL/m² oranında artıyor"

🛒 Satış Tahmini

X (Bağımsız): Reklam bütçesi
Y (Bağımlı): Satış miktarı
β₀: Temel satış (reklamsız)
β₁: Reklamın satışa etkisi

Örnek: β₀ = 100 adet, β₁ = 5 adet/1,000 TL
"Her 1,000 TL reklam bütçesi 5 adet ek satış getiriyor"

🎮 İNTERAKTİF OLS DEMOSU

Aşağıdaki noktaları sürükleyin ve OLS çizgisinin nasıl otomatik olarak en iyi uyumu bulduğunu görün!

📊 OLS İSTATİSTİKLERİ

Eğim (β₁): 0.00
Kesim (β₀): 0.00
MSE (Ort. Kare Hata): 0.00
R² (Açıklama Gücü): 0.00

🎯 CANLI YORUMLAMA

Noktaları hareket ettirdikçe bu alan otomatik olarak güncellenecek...

💡 PRATİK BİLGİLER

  • Pozitif β₁: X artarsa Y de artar (pozitif ilişki)
  • Negatif β₁: X artarsa Y azalır (negatif ilişki)
  • R² 1'e yakınsa: Model veriyi çok iyi açıklıyor
  • R² 0'a yakınsa: Model zayıf açıklama gücüne sahip

🐍 PYTHON'DA OLS UYGULAMASI

⚠️ ÖNEMLİ UYARI

OLS sadece doğrusal ilişkiler için çalışır. Eğer veriniz doğrusal değilse (eğri şeklindeyse), polinom regresyon veya başka yöntemler düşünmelisiniz.

Manuel Hesaplama (Temel Anlayış İçin)

import numpy as np

# Örnek veri - Ev fiyatları
X = np.array([85, 70, 120, 55, 150])  # Metrekare
y = np.array([2100000, 1650000, 2850000, 980000, 3600000])  # Fiyat

# OLS formülleri ile manuel hesaplama
def manual_ols(X, y):
    n = len(X)
    x_mean = np.mean(X)
    y_mean = np.mean(y)
    
    # β1 (eğim) hesapla - Metrekare başına fiyat artışı
    numerator = np.sum((X - x_mean) * (y - y_mean))
    denominator = np.sum((X - x_mean) ** 2)
    beta_1 = numerator / denominator
    
    # β0 (kesim) hesapla - Temel arsa değeri
    beta_0 = y_mean - beta_1 * x_mean
    
    return beta_0, beta_1

beta_0, beta_1 = manual_ols(X, y)
print(f"Temel arsa değeri (β0): {beta_0:,.0f} TL")
print(f"Metrekare başına artış (β1): {beta_1:,.0f} TL/m²")

# Tahmin yapalım
tahmin_100m2 = beta_0 + beta_1 * 100
print(f"100m² ev tahmini: {tahmin_100m2:,.0f} TL")

Scikit-learn ile (Gerçek Projeler İçin)

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np

# Veriyi hazırla (2D array olmalı)
X = np.array([85, 70, 120, 55, 150]).reshape(-1, 1)  # Metrekare
y = np.array([2100000, 1650000, 2850000, 980000, 3600000])  # Fiyat

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

# Katsayıları al
beta_0 = model.intercept_
beta_1 = model.coef_[0]

print(f"Temel arsa değeri (β0): {beta_0:,.0f} TL")
print(f"Metrekare başına artış (β1): {beta_1:,.0f} TL/m²")

# Tahmin yap
y_pred = model.predict(X)

# Model performansı
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)

print(f"MSE: {mse:,.0f}")
print(f"R²: {r2:.3f}")  # Modelin açıklama gücü

# Yeni tahmin
yeni_ev = np.array([[100]])  # 100m² ev
tahmin = model.predict(yeni_ev)
print(f"100m² ev tahmini: {tahmin[0]:,.0f} TL")

✅ ÖĞRENDİKLERİMİZ

OLS en iyi uyum çizgisini bulur
Hata karelerinin toplamını minimize eder
β₀ (kesim) ve β₁ (eğim) verir
R² modelin açıklama gücünü gösterir
Sadece doğrusal ilişkiler için çalışır
Gerçek hayatta yaygın olarak kullanılır