Yapay Zeka ile Borsa Tahmini Nasıl Yapılır?
Borsa, oynak, dinamik ve doğrusal olmayan bir piyasa olarak bilinir. Peki, yapay zeka ile borsa tahmini nedir, nasıl yapılır? Doğru hisse senedi fiyat tahmini, politika, küresel ekonomik koşullar, beklenmeyen olaylar, bir şirketin finansal performansı vb. gibi birden fazla (makro ve mikro) faktör nedeniyle son derece zordur.
Ancak tüm bunlar aynı zamanda kalıplar bulmak için çok fazla veri olduğu anlamına geliyor. Bu nedenle, finans analistleri, araştırmacılar ve veri bilimcileri borsa trendlerini tespit etmek için analitik teknikleri keşfetmeye devam ediyor. Bu, emirleri yürütmek için otomatik, önceden programlanmış ticaret stratejileri kullanan algoritmik ticaret kavramının ortaya çıkmasına neden oldu .
Yapay Zeka ile Borsa Tahmini
Bu makalede, hisse senedi hareketlerini tahmin etmek için hem geleneksel nicel finans metodolojisini hem de makine öğrenimi algoritmalarını kullanacağız. Aşağıdaki konuları ele alacağız:
- Hisse senedi analizi: temel ve teknik analiz
- Zaman serisi verileri olarak hisse senedi fiyatları ve ilgili kavramlar
- Hareketli Ortalama teknikleriyle hisse senedi fiyatlarının tahmini
- LSTM’lere Giriş
- LSTM modeliyle hisse senedi fiyatlarının tahmini
- ESN gibi yeni metodolojiler hakkında son düşünceler
Yasal Uyarı: Bu proje/makale finansal, ticari ve yatırım tavsiyesi sağlamak için tasarlanmamıştır. Modellerin doğruluğu konusunda hiçbir garanti verilmemektedir. İzleyiciler, bu makalede sunulan yöntemleri veya kodu kullanarak herhangi bir yatırım kararı vermeden önce gerekli özeni göstermelidir.
Yapay Zeka ile Borsa Tahmini Nasıl Yapılır?
Hisse senetleri söz konusu olduğunda temel ve teknik analizler piyasa analizi yelpazesinin zıt uçlarında yer alır.
- Temel analiz (daha fazla bilgi için buraya tıklayabilirsiniz ):
- Bir şirketin hisse senetlerini, maddi varlıklar, finansal tablolar, yönetim etkinliği, stratejik girişimler ve tüketici davranışları dahil ancak bunlarla sınırlı olmamak üzere içsel değerini inceleyerek değerlendirir; esasen bir şirketin tüm temellerini kapsar.
- Uzun vadeli yatırımlar için önemli bir gösterge olan temel analiz, gelirleri, varlıkları, maliyetleri, yükümlülükleri vb. ölçmek için hem geçmiş hem de güncel verilere dayanır.
- Temel analiz sonuçları genel olarak kısa vadeli haberlerle değişmez.
- Teknik analiz (daha fazlasını burada okuyabilirsiniz ):
- Hisse senedi fiyatları, geçmiş getiriler ve geçmiş işlem hacimleri gibi borsadaki faaliyetlerden elde edilen ölçülebilir verileri analiz eder; yani işlem sinyallerini tanımlayabilecek ve borsadaki hareket modellerini yakalayabilen niceliksel bilgileri analiz eder.
- Teknik analiz de temel analiz gibi geçmiş verilere ve güncel verilere odaklanır, ancak esas olarak kısa vadeli işlem amaçları için kullanılır.
- Teknik analizin kısa vadeli yapısı nedeniyle haberlerden kolaylıkla etkilenebilmektedir.
- Popüler teknik analiz metodolojileri arasında hareketli ortalamalar (MA), destek ve direnç seviyeleri ile trend çizgileri ve kanalları yer alır .
Egzersizimiz için yalnızca teknik analize bakacağız ve hisse senedi fiyatlarını tahmin etmek için Basit MA ve Üstel MA tekniklerine odaklanacağız. Ek olarak, zaman serileri için derin öğrenme çerçevesi olan LSTM’yi (Uzun Kısa Süreli Bellek) kullanarak bir tahmin modeli oluşturacağız ve performansını teknik analizimizle karşılaştıracağız.
Feragatnamede belirtildiği gibi, hisse senedi alım satım stratejisi bu makalenin kapsamında değildir. Analizi daha iyi anlamanıza yardımcı olmak için sadece alım satım/yatırım terimlerini kullanacağım, ancak bu finansal tavsiye değildir. Şu terimleri kullanacağız:
- trend göstergeleri : hisse senedi fiyatlarının eğilimini temsil eden istatistikler,
- Orta vadeli hareketler : Hisse senedi fiyatlarının 50 günlük hareket eğilimi.
Zaman serisi verileri olarak hisse senedi fiyatları
Değişkenliğe rağmen, hisse senedi fiyatları sadece rastgele oluşturulmuş sayılar değildir. Bu nedenle, ayrık zamanlı verilerin bir dizisi olarak analiz edilebilirler ; başka bir deyişle, ardışık zaman noktalarında (genellikle günlük olarak) alınan zaman serisi gözlemleri. Zaman serisi tahmini (gelecekteki değerleri geçmiş değerlere göre tahmin etme) hisse senedi tahminine iyi uygulanır.
Zaman serisi verilerinin ardışık doğası nedeniyle, bu bilgi dizisini bir araya getirmenin bir yoluna ihtiyacımız var. Tüm olası teknikler arasında en sezgisel olanı, kısa vadeli dalgalanmaları düzeltme yeteneğine sahip MA’dır. Bir sonraki bölümde daha fazla ayrıntıyı tartışacağız.
Veri seti analizi
Bu gösteri egzersizi için, Apple hissesinin (hisse senedi sembolü AAPL) son 21 yılın (1999-11-01 – 2021-07-09) kapanış fiyatlarını kullanacağız. Analiz verileri, tarihsel ve gerçek zamanlı borsa verileri için ücretsiz bir API sunan Alpha Vantage’dan yüklenecektir.
Alpha Vantage’dan veri almak için ücretsiz bir API anahtarına ihtiyacınız var; adım adım bir eğitim burada bulunabilir . Bir API oluşturmak istemiyor musunuz? Endişelenmeyin, analiz verileri burada da mevcuttur. Başka hisse senetlerini keşfetmek isterseniz, verileri indirmek için koda bu Github deposundan da erişilebilir. API’ye sahip olduğunuzda, ihtiyacınız olan tek şey belirli hisse senedi için bir borsa sembolüdür.
Model eğitimi için verilerin en eski %80’ini kullanacağız ve en son %20’sini bekleme test kümesi olarak saklayacağız.
# %% Train-Test split for time-series
stockprices = pd.read_csv("stock_market_data-AAPL.csv", index_col="Date")
test_ratio = 0.2
training_ratio = 1 - test_ratio
train_size = int(training_ratio * len(stockprices))
test_size = int(test_ratio * len(stockprices))
print(f"train_size: {train_size}")
print(f"test_size: {test_size}")
train = stockprices[:train_size][["Close"]]
test = stockprices[train_size:][["Close"]]
Neptune.ai projesi oluşturma
Model eğitimi ve performans karşılaştırması açısından neptune.ai, kullanıcıların hiper-parametre spesifikasyonu ve değerlendirme grafikleri de dahil olmak üzere modelle ilgili her şeyi takip etmesini kolaylaştırır.
Sorumluluk reddi
neptune.ai bir hisse senedi tahmin yazılımı DEĞİLDİR.Hata ayıklama ve deneyleri yeniden üretme, sonuçları paylaşma ve karmaşık model devri konusunda zorluk çeken ML/AI ekipleri için bir deney izleyicisidir.
neptune.ai, aylarca süren model eğitimlerini izlemenize, büyük miktarda veriyi takip etmenize ve binlerce metriği göz açıp kapayıncaya kadar karşılaştırmanıza olanak tanır.
Uygulamada görTam ekran önizleme
Şimdi bu özel egzersiz için Neptune’de bir proje oluşturalım ve adını ” StockPrediction ” koyalım.
Değerlendirme ölçümleri ve yardımcı işlevler
Hisse senedi fiyatları tahmini esasen bir regresyon problemi olduğundan, RMSE (Ortalama Karesel Hata) ve MAPE (Ortalama Mutlak Yüzde Hata %) mevcut model değerlendirme ölçütlerimiz olacaktır. Her ikisi de tahmin doğruluğunun yararlı ölçütleridir.
Burada N = zaman noktası sayısı, At = gerçek/gerçek hisse senedi fiyatı, Ft = öngörülen/tahmin edilen değerdir .
RMSE, tahmin edilen ve gerçek değerler arasındaki farkları verirken, MAPE (%) bu farkı gerçek değerlere göre ölçer. Örneğin, %12’lik bir MAPE değeri, tahmin edilen hisse senedi fiyatı ile gerçek hisse senedi fiyatı arasındaki ortalama farkın %12 olduğunu gösterir.
Şimdi, mevcut alıştırma için birkaç yardımcı fonksiyon oluşturalım.
- Hisse senedi fiyat verilerini eğitim dizisi X’e ve bir sonraki çıktı değeri Y’ye bölün,
## Split the time-series data into training seq X and output value Y
def extract_seqX_outcomeY(data, N, offset):
"""
Split time-series into training sequence X and outcome value Y
Args:
data - dataset
N - window size, e.g., 50 for 50 days of historical stock prices
offset - position to start the split
"""
X, y = [], []
for i in range(offset, len(data)):
X.append(data[i - N : i])
y.append(data[i])
return np.array(X), np.array(y)
- RMSE ve MAPE’yi (%) hesaplayın,
#### Calculate the metrics RMSE and MAPE ####
def calculate_rmse(y_true, y_pred):
"""
Calculate the Root Mean Squared Error (RMSE)
"""
rmse = np.sqrt(np.mean((y_true - y_pred) ** 2))
return rmse
def calculate_mape(y_true, y_pred):
"""
Calculate the Mean Absolute Percentage Error (MAPE) %
"""
y_pred, y_true = np.array(y_pred), np.array(y_true)
mape = np.mean(np.abs((y_true - y_pred) / y_true)) * 100
return mape
- Teknik analiz için değerlendirme metriklerini hesaplayın ve Neptün’e kaydedin,
def calculate_perf_metrics(var):
### RMSE
rmse = calculate_rmse(
np.array(stockprices[train_size:]["Close"]),
np.array(stockprices[train_size:][var]),
)
### MAPE
mape = calculate_mape(
np.array(stockprices[train_size:]["Close"]),
np.array(stockprices[train_size:][var]),
)
## Log to Neptune
run["RMSE"] = rmse
run["MAPE (%)"] = mape
return rmse, mape
- Hisse senedi fiyatlarının eğilimini çizin ve grafiği Neptün’e kaydedin,
def plot_stock_trend(var, cur_title, stockprices=stockprices):
ax = stockprices[["Close", var, "200day"]].plot(figsize=(20, 10))
plt.grid(False)
plt.title(cur_title)
plt.axis("tight")
plt.ylabel("Stock Price ($)")
## Log to Neptune
run["Plot of Stock Predictions"].upload(
neptune.types.File.as_image(ax.get_figure())
)
Hareketli Ortalama (MA) tekniği ile hisse senedi fiyatının tahmini
MA, borsa piyasasındaki rastgele hareketleri yumuşatmak için popüler bir yöntemdir. Kayan bir pencereye benzer şekilde, MA zaman ölçeği/dönemleri boyunca hareket eden bir ortalamadır; daha yeni veri noktaları eklendikçe daha eski veri noktaları düşürülür.
Kısa vadeli, orta vadeli ve uzun vadeli yatırımlarda sıklıkla kullanılan dönemler sırasıyla 20 günlük, 50 günlük ve 200 günlük MA’lardır .
Finans analistleri tarafından en çok tercih edilen iki MA türü vardır: Basit MA ve Üstel MA.
Basit MA
Basit Hareketli Ortalama’nın kısaltması olan SMA, belirli sayıda dönem boyunca belirli bir aralıktaki hisse senedi (kapanış) fiyatlarının ortalamasını hesaplar. SMA formülü şudur:
Burada Pn = n zaman noktasındaki hisse senedi fiyatı, N = zaman noktalarının sayısıdır.
Bir SMA modeli oluşturma egzersizi için, 50 günlük SMA’yı hesaplamak için aşağıdaki Python kodunu kullanacağız. Ayrıca iyi bir ölçü için 200 günlük bir SMA ekleyeceğiz.
window_size = 50
# Initialize a Neptune run
run = neptune.init_run(
project=myProject,
name="SMA",
description="stock-prediction-machine-learning",
tags=["stockprediction", "MA_Simple", "neptune"],
)
window_var = f"{window_size}day"
stockprices[window_var] = stockprices["Close"].rolling(window_size).mean()
### Include a 200-day SMA for reference
stockprices["200day"] = stockprices["Close"].rolling(200).mean()
### Plot and performance metrics for SMA model
plot_stock_trend(var=window_var, cur_title="Simple Moving Averages")
rmse_sma, mape_sma = calculate_perf_metrics(var=window_var)
### Stop the run
run.stop()
Neptune çalışmamızda, test setindeki performans ölçümlerini göreceğiz; RMSE = 43,77 ve MAPE = %12,53. Ayrıca, trend grafiği, gerçek hisse senedi kapanış değerleriyle karşılaştırıldığında 50 günlük, 200 günlük SMA tahminlerini gösterir.
Ayrıca aşağıdaki trend grafiği, gerçek hisse kapanış değerleriyle karşılaştırıldığında 50 günlük, 200 günlük SMA tahminlerini göstermektedir.
50 günlük SMA’nın (kısa-orta) hareketler açısından 200 günlük SMA’dan daha iyi bir trend göstergesi olması şaşırtıcı değil. Yine de her iki gösterge de gerçek değerlerden daha küçük tahminler veriyor gibi görünüyor.
Üstel MA
Tüm geçmiş veri noktalarına eşit ağırlıklar atayan SMA’dan farklı olarak, Exponential Moving Average’ın kısaltması olan EMA, yakın fiyatlara, yani örneğimizdeki 50 günlük MA’nın kuyruk veri noktalarına daha yüksek ağırlıklar uygular. Ağırlıklandırma faktörünün büyüklüğü zaman periyotlarının sayısına bağlıdır. EMA’yı hesaplama formülü şudur:
,
burada P t = t zaman noktasındaki fiyat,
EMA t-1 = t-1 zaman noktasındaki EMA,
N = EMA’daki zaman noktası sayısı,
ve ağırlık faktörü k = 2/(N+1).
EMA’nın SMA’ya göre bir avantajı, EMA’nın fiyat değişikliklerine daha duyarlı olmasıdır, bu da onu kısa vadeli ticaret için kullanışlı hale getirir. İşte EMA’nın bir Python uygulaması:
# Initialize a Neptune run
run = neptune.init_run(
project=myProject,
name="EMA",
description="stock-prediction-machine-learning",
tags=["stockprediction", "MA_Exponential", "neptune"],
)
###### Exponential MA
window_ema_var = f"{window_var}_EMA"
# Calculate the 50-day exponentially weighted moving average
stockprices[window_ema_var] = (
stockprices["Close"].ewm(span=window_size, adjust=False).mean()
)
stockprices["200day"] = stockprices["Close"].rolling(200).mean()
### Plot and performance metrics for EMA model
plot_stock_trend(
var=window_ema_var, cur_title="Exponential Moving Averages")
rmse_ema, mape_ema = calculate_perf_metrics(var=window_ema_var)
### Stop the run
run.stop()
Neptune’de izlenen performans metriklerini incelediğimizde, RMSE = 36,68 ve MAPE = %10,71’e sahibiz, bu da sırasıyla RMSE ve MAPE için SMA’nın %43,77 ve %12,53’ünden bir iyileştirmedir. Bu EMA modelinden üretilen trend grafiği ayrıca SMA’yı geride bıraktığını ima eder.
SMA ve EMA tahmin performansının karşılaştırılması
Aşağıdaki ekran görüntüsü Neptün’de SMA ve EMA’nın yan yana karşılaştırmasını göstermektedir.
Zaman serisi verileri için LSTM’lere giriş
Şimdi LSTM modeline geçelim. LSTM, Long Short-term Memory’nin kısaltmasıdır ve zaman serileri için son derece güçlü bir algoritmadır. Tarihsel trend modellerini yakalayabilir ve gelecekteki değerleri yüksek doğrulukla tahmin edebilir.
İlgili gönderi
Zaman Serisi Tahmini için ARIMA vs Prophet vs LSTM
Devamını oku
Özetle, bir LSTM modelini anlamak için temel bileşen , bir hücrenin iç kısa süreli ve uzun süreli hafızalarını temsil eden Hücre Durumu’dur ( C t ).
Hücre durumunu kontrol etmek ve yönetmek için bir LSTM modeli üç kapı/katman içerir. Buradaki “kapıların” bilginin içeri girmesine (hatırlanması) veya dışarı çıkmasına (unutulması) izin veren filtreler olarak ele alınabileceğini belirtmekte fayda var.
- Kapıyı unut:
Adından da anlaşılacağı gibi, unut kapısı geçerli hücre durumundan hangi bilgilerin atılacağına karar verir. Matematiksel olarak, önceki hücre durumundan ( Ct-1 ) her değer için [0, 1] arasında bir değer çıktısı/döndürmesi için bir sigmoid fonksiyonu uygular ; burada ‘1’ “tamamen geçmeyi” belirtirken ‘0’ “tamamen filtrelemeyi” belirtir
- Giriş kapısı:
Mevcut hücre durumuna hangi yeni bilgilerin eklenip depolanacağını seçmek için kullanılır. Bu katmanda, giriş vektöründeki ( i t ) değerleri azaltmak için bir sigmoid fonksiyonu uygulanır ve ardından bir tanh fonksiyonu [-1, 1] ( C t ) arasındaki her değeri sıkıştırır. i t ve C t’nin eleman eleman matris çarpımı, mevcut hücre durumuna eklenmesi gereken yeni bilgileri temsil eder.
- Çıkış kapısı:
Çıkış kapısı, bir sonraki hücre durumuna akan çıkışı kontrol etmek için uygulanır. Giriş kapısına benzer şekilde, bir çıkış kapısı istenmeyen bilgileri filtrelemek için bir sigmoid ve ardından bir tanh fonksiyonu uygular ve yalnızca geçmesine izin verdiğimiz bilgileri tutar.
LSTM hakkında daha detaylı bilgi edinmek için bu dokümanı inceleyebilirsiniz .
LSTM teorisini bildiğinizde, gerçek dünya hisse senedi fiyatlarını tahmin etmede nasıl bir performans gösterdiğini merak ediyor olmalısınız. Bir sonraki bölümde, bir LSTM modeli oluşturarak ve performansını iki teknik analiz modeliyle karşılaştırarak öğreneceğiz: SMA ve EMA.
LSTM modeliyle hisse senedi fiyatlarının tahmini
Öncelikle belirtilen hiperparametreleri içeren LSTM’ye özel bir Neptune deneyi oluşturmamız gerekiyor.
layer_units = 50
optimizer = "adam"
cur_epochs = 15
cur_batch_size = 20
cur_LSTM_args = {
"units": layer_units,
"optimizer": optimizer,
"batch_size": cur_batch_size,
"epochs": cur_epochs,
}
# Initialize a Neptune run
run = neptune.init_run(
project=myProject,
name="LSTM",
description="stock-prediction-machine-learning",
tags=["stockprediction", "LSTM", "neptune"],
)
run["LSTM_args"] = cur_LSTM_args
Daha sonra, LSTM model düzenlemesi için giriş verilerini ölçeklendiriyoruz ve bunları eğitim ve test kümelerine ayırıyoruz.
# Scale our dataset
scaler = StandardScaler()
scaled_data = scaler.fit_transform(stockprices[["Close"]])
scaled_data_train = scaled_data[: train.shape[0]]
# We use past 50 days’ stock prices for our training to predict the 51th day's closing price.
X_train, y_train = extract_seqX_outcomeY(scaled_data_train, window_size, window_size)
Birkaç not:
- Daha önce görmüş olabileceğiniz gibi MinMaxScaler yerine StandardScaler’ı kullanıyoruz . Bunun nedeni, hisse senedi fiyatlarının sürekli değişmesi ve gerçek bir minimum veya maksimum değerin olmamasıdır. MinMaxScaler’ı kullanmak mantıklı değildir , ancak bu seçim muhtemelen günün sonunda feci sonuçlara yol açmayacaktır;
- Ham formatındaki hisse senedi fiyat verileri doğrudan bir LSTM modelinde kullanılamaz; önceden tanımlanmış ` extract_seqX_outcomeY` fonksiyonumuzu kullanarak dönüştürmemiz gerekir. Örneğin, 51. fiyatı tahmin etmek için bu fonksiyon 50 veri noktasının giriş vektörlerini oluşturur ve 51. fiyatı sonuç değeri olarak kullanır.
Devam edelim, LSTM modelleme sürecini başlatalım. Özellikle, iki gizli katman ve çıktıda ‘doğrusal’ bir aktivasyon fonksiyonu olan bir LSTM oluşturuyoruz. Ayrıca, model eğitim ilerlemesini canlı olarak izlemek ve kaydetmek için Neptune’ün Keras entegrasyonunu kullanıyoruz.
Entegrasyon hakkında daha fazla bilgiyi Neptune dokümanlarında okuyabilirsiniz .
### Setup Neptune's Keras integration ###
from neptune.integrations.tensorflow_keras import NeptuneCallback
neptune_callback = NeptuneCallback(run=run)
### Build a LSTM model and log training progress to Neptune ###
def Run_LSTM(X_train, layer_units=50):
inp = Input(shape=(X_train.shape[1], 1))
x = LSTM(units=layer_units, return_sequences=True)(inp)
x = LSTM(units=layer_units)(x)
out = Dense(1, activation="linear")(x)
model = Model(inp, out)
# Compile the LSTM neural net
model.compile(loss="mean_squared_error", optimizer="adam")
return model
model = Run_LSTM(X_train, layer_units=layer_units)
history = model.fit(
X_train,
y_train,
epochs=cur_epochs,
batch_size=cur_batch_size,
verbose=1,
validation_split=0.1,
shuffle=True,
callbacks=[neptune_callback],
)
Eğitim ilerlemesi Neptün’den canlı olarak izlenebiliyor.
Uygulamada görTam ekran önizleme
Eğitim tamamlandıktan sonra, modeli bekleme kümemize karşı test edeceğiz.
# predict stock prices using past window_size stock prices
def preprocess_testdat(data=stockprices, scaler=scaler, window_size=window_size, test=test):
raw = data["Close"][len(data) - len(test) - window_size:].values
raw = raw.reshape(-1,1)
raw = scaler.transform(raw)
X_test = [raw[i-window_size:i, 0] for i in range(window_size, raw.shape[0])]
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
return X_test
X_test = preprocess_testdat()
predicted_price_ = model.predict(X_test)
predicted_price = scaler.inverse_transform(predicted_price_)
# Plot predicted price vs actual closing price
test["Predictions_lstm"] = predicted_price
Performans ölçümlerini hesaplama ve bunları Neptune’e kaydetme zamanı.
# Evaluate performance
rmse_lstm = calculate_rmse(np.array(test["Close"]), np.array(test["Predictions_lstm"]))
mape_lstm = calculate_mape(np.array(test["Close"]), np.array(test["Predictions_lstm"]))
### Log to Neptune
run["RMSE"] = rmse_lstm
run["MAPE (%)"] = mape_lstm
### Plot prediction and true trends and log to Neptune
def plot_stock_trend_lstm(train, test):
fig = plt.figure(figsize = (20,10))
plt.plot(np.asarray(train.index), np.asarray(train["Close"]), label = "Train Closing Price")
plt.plot(np.asarray(test.index), np.asarray(test["Close"]), label = "Test Closing Price")
plt.plot(np.asarray(test.index), np.asarray(test["Predictions_lstm"]), label = "Predicted Closing Price")
plt.title("LSTM Model")
plt.xlabel("Date")
plt.ylabel("Stock Price ($)")
plt.legend(loc="upper left")
## Log image to Neptune
run["Plot of Stock Predictions"].upload(neptune.types.File.as_image(fig))
plot_stock_trend_lstm(train, test)
### Stop the run after logging
run.stop()
Neptün’de, LSTM modelimizin RMSE = 12,58 ve MAPE = %2’ye ulaştığını görmek şaşırtıcı; SMA ve EMA modellerine göre muazzam bir gelişme! Trend grafiği, test setimiz için tahmin edilen ve gerçek kapanış fiyatının neredeyse mükemmel bir örtüşmesini gösteriyor.
Uygulamada görTam ekran önizleme
Yeni metodolojiler hakkında son düşünceler
LSTM’lerin avantajını, geleneksel MA modellerine kıyasla Apple hisse senedi fiyatlarını tahmin etme örneğinde gördük. Diğer hisse senetlerine genellemeler yaparken dikkatli olun, çünkü diğer durağan zaman serilerinin aksine, hisse senedi piyasası verileri daha az mevsimseldir ve daha kaotiktir.
Örneğimizde, en büyük teknoloji devlerinden biri olan Apple, yalnızca olgun bir iş modeli ve yönetim kurmakla kalmadı, satış rakamları da yenilikçi ürün veya hizmetlerin piyasaya sürülmesinden faydalandı. Her ikisi de Apple hissesinin daha düşük örtük oynaklığına katkıda bulunarak , LSTM modeli için tahminleri farklı, yüksek oynaklıklı hisse senetlerine kıyasla nispeten daha kolay hale getiriyor.
Borsa piyasasının kaotik dinamiklerini hesaba katmak için Yankı Durumu Ağları (ESN) önerilmiştir . RNN (Tekrarlayan Sinir Ağları) ailesi içinde yeni bir buluş olan ESN, akan ve gevşek bir şekilde birbirine bağlı birkaç nörona sahip gizli bir katman kullanır; bu gizli katman, giriş verilerinin doğrusal olmayan geçmiş bilgilerini yakalamak için tasarlanmış ‘rezervuar’ olarak adlandırılır.
Yüksek seviyede, bir ESN bir zaman serisi giriş vektörünü alır ve onu yüksek boyutlu bir özellik alanına, yani dinamik rezervuara eşler (nöronlar bir ağ gibi değil, bir rezervuar gibi bağlıdır). Daha sonra, çıktı katmanında, son tahminleri hesaplamak için doğrusal bir aktivasyon fonksiyonu uygulanır.
Bu metodoloji hakkında daha fazla bilgi edinmek istiyorsanız, Jaeger ve Haas’ın orijinal makalesine göz atın .
Ek olarak, genel olarak borsa piyasası ve belirli bir ilgi hissesi ile ilgili haberler ve sosyal medyada duygu analizini dahil etmek ilginç olacaktır. Daha iyi hisse senedi fiyat tahminleri için bir diğer umut vadeden yaklaşım, MA tahminlerini LSTM modeline girdi vektörleri olarak eklediğimiz hibrit modeldir. Farklı metodolojileri de keşfetmek isteyebilirsiniz.