GoshawkVortexAI commited on
Commit
1fda94c
·
verified ·
1 Parent(s): 7e39360

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -12
app.py CHANGED
@@ -271,37 +271,54 @@ def build_models() -> dict:
271
  def train_and_evaluate(df: pd.DataFrame):
272
  """
273
  Modelleri eğitir; son 10 günü test seti olarak kullanır.
274
- Dönüş: trained_models, scaler, test_preds (dict), y_test
 
 
 
275
  """
276
  avail = [c for c in FEATURE_COLS if c in df.columns]
277
- X = df[avail].values
278
- y = df['Close'].values
 
 
 
 
 
279
 
280
  split = -10
281
- X_train, X_test = X[:split], X[split:]
282
- y_train, y_test = y[:split], y[split:]
 
283
 
284
  scaler = StandardScaler()
285
  X_tr_sc = scaler.fit_transform(X_train)
286
  X_te_sc = scaler.transform(X_test)
287
 
288
- models = build_models()
289
- trained = {}
290
- test_preds = {}
291
 
292
  for name, m in models.items():
293
  m.fit(X_tr_sc, y_train)
294
- test_preds[name] = m.predict(X_te_sc)
295
- trained[name] = m
 
 
 
296
 
297
  return trained, scaler, test_preds, y_test, avail
298
 
299
 
300
  def predict_next(trained: dict, scaler, df: pd.DataFrame, avail: list):
301
- """Son satırın feature'larından ertesi gün tahmini üretir."""
 
 
 
 
 
302
  x = df[avail].iloc[-1].values.reshape(1, -1)
303
  xs = scaler.transform(x)
304
- preds = {n: float(m.predict(xs)[0]) for n, m in trained.items()}
305
  ensemble = float(np.mean(list(preds.values())))
306
  return preds, ensemble
307
 
 
271
  def train_and_evaluate(df: pd.DataFrame):
272
  """
273
  Modelleri eğitir; son 10 günü test seti olarak kullanır.
274
+ Hedef: yarınki kapanış - bugünkü kapanış (fiyat değişimi / delta).
275
+ Bu sayede Ridge dahil tüm modeller mutlak fiyata yakınsamak yerine
276
+ gerçek yön ve büyüklük sinyali öğrenir.
277
+ Dönüş: trained_models, scaler, test_preds (mutlak fiyat), y_test (mutlak fiyat), avail
278
  """
279
  avail = [c for c in FEATURE_COLS if c in df.columns]
280
+ X = df[avail].values
281
+ close = df['Close'].values
282
+
283
+ # Hedef: bir sonraki günün fiyat değişimi (delta)
284
+ y_delta = np.diff(close) # uzunluk = N-1
285
+ X = X[:-1] # son satırı at (yarını bilinmiyor)
286
+ close_aligned = close[:-1] # delta ile hizalı kapanışlar
287
 
288
  split = -10
289
+ X_train, X_test = X[:split], X[split:]
290
+ y_train, y_delta_test = y_delta[:split], y_delta[split:]
291
+ close_test = close_aligned[split:]
292
 
293
  scaler = StandardScaler()
294
  X_tr_sc = scaler.fit_transform(X_train)
295
  X_te_sc = scaler.transform(X_test)
296
 
297
+ models = build_models()
298
+ trained = {}
299
+ test_preds = {} # grafik/metrik uyumu için mutlak fiyat olarak sakla
300
 
301
  for name, m in models.items():
302
  m.fit(X_tr_sc, y_train)
303
+ delta_pred = m.predict(X_te_sc)
304
+ test_preds[name] = close_test + delta_pred # delta → mutlak fiyat
305
+ trained[name] = m
306
+
307
+ y_test = close_test + y_delta_test # gerçek mutlak fiyat (backtest için)
308
 
309
  return trained, scaler, test_preds, y_test, avail
310
 
311
 
312
  def predict_next(trained: dict, scaler, df: pd.DataFrame, avail: list):
313
+ """
314
+ Son satırın feature'larından ertesi gün tahmini üretir.
315
+ Model delta (değişim) tahmin eder; mevcut kapanışa eklenerek
316
+ mutlak fiyata dönüştürülür.
317
+ """
318
+ cp = float(df['Close'].iloc[-1])
319
  x = df[avail].iloc[-1].values.reshape(1, -1)
320
  xs = scaler.transform(x)
321
+ preds = {n: cp + float(m.predict(xs)[0]) for n, m in trained.items()}
322
  ensemble = float(np.mean(list(preds.values())))
323
  return preds, ensemble
324