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?
β₀ - 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.
💡 ÇÖ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!"
📐 MATEMATİKSEL TEMEL
Doğrusal Regresyon Modeli
OLS Amacı: Hata Kareleri Toplamını Minimize Et
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ü
β₀ (Kesim) Formülü
🏠 GERÇEK HAYAT ÖRNEKLERİ
📈 Ev Fiyat Tahmini
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
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İ
🎯 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")