Makine öğrenmesi denince akla genelde karmaşık derin öğrenme modelleri gelir, ama en basit ve anlaşılır model olan doğrusal regresyon ile bile bir hisse senedinin fiyat eğilimi hakkında kaba bir tahmin üretebilirsiniz. Bu derste scikit-learn ile böyle bir model kuracağız.
Uyarı: Bu yöntem eğitim amaçlıdır. Gerçek piyasalar sayısız faktörden (haber akışı, makroekonomik veriler, arz-talep) etkilenir; basit bir doğrusal regresyon modeli yatırım tavsiyesi olarak kullanılamaz.
Gerekli Kütüphaneler
pip install scikit-learn pandas yfinance
Geçmiş Fiyat Verisini Çekmek
Daha önceki derslerde gördüğümüz yfinance kütüphanesiyle geçmiş kapanış fiyatlarını çekiyoruz:
import yfinance as yf
veri = yf.download("THYAO.IS", period="6mo", interval="1d")
kapanis_fiyatlari = veri["Close"]
Veriyi Modele Uygun Hale Getirmek
Doğrusal regresyon, bir X (bağımsız değişken) ile bir y (bağımlı değişken) arasında ilişki kurar. Burada X olarak günleri sırayla numaralandırıyoruz, y olarak da o günün kapanış fiyatını kullanıyoruz:
import numpy as np
X = np.arange(len(kapanis_fiyatlari)).reshape(-1, 1) # 0, 1, 2, 3, ... gün sırası
y = kapanis_fiyatlari.values
.reshape(-1, 1) çağrısı gereklidir çünkü scikit-learn, X girdisinin her zaman iki boyutlu (satır x özellik) bir dizi olmasını bekler.
Modeli Eğitmek
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, y)
.fit(X, y) çağrısı, verilen noktalara en iyi uyan doğruyu (eğim ve kesişim noktasını) hesaplar.
Gelecek Günü Tahmin Etmek
gelecek_gun = np.array([[len(kapanis_fiyatlari) + 5]]) # 5 iş günü sonrası
tahmin = model.predict(gelecek_gun)
print(f"Tahmini fiyat: {tahmin[0]:.2f}")
Modelin Uyum Kalitesini Ölçmek: R² Skoru
r_kare = model.score(X, y)
print(f"Modelin uyum skoru (R²): {r_kare:.3f}")
R² skoru 0 ile 1 arasında değişir; 1'e ne kadar yakınsa, doğrusal model geçmiş veriye o kadar iyi uymuş demektir. Ancak yüksek bir R² skoru bile, gelecekteki fiyat hareketinin bu doğrusal eğilimi izleyeceğinin garantisi değildir — hisse fiyatları doğrusal değil, çoğunlukla gürültülü ve döngüsel hareket eder.
Tahmini Görselleştirmek
import matplotlib.pyplot as plt
plt.plot(X, y, label="Gerçek Fiyat")
plt.plot(X, model.predict(X), label="Regresyon Doğrusu", linestyle="--")
plt.legend()
plt.savefig("tahmin.png")
Bu Modelin Sınırları
Doğrusal regresyon, ismi üzerinde, yalnızca doğrusal bir ilişki varsayar — oysa fiyat hareketleri genelde iniş çıkışlı, mevsimsel veya rejim değiştiren bir yapıdadır. Daha gerçekçi sonuçlar için polinom regresyon, hareketli ortalamalar veya zaman serisi modelleri (ARIMA, Prophet) denenebilir; ama bu derste amacımız scikit-learn'ün en temel API'sini (fit, predict, score) tanımaktı.
Sırada Ne Var?
Sırada, ta kütüphanesiyle RSI ve hareketli ortalama gibi teknik analiz indikatörlerini hesaplamayı göreceğiz.