
Merhaba,
Bu yazımızda makine öğrenmesi gözetimli makine öğrenmesi altında yer alan lineer regresyon modeli ile hisse senedi fiyat tahminlemesi python dili kullanarak GUBRF(Gübre Fabrikalari Türk Anonim Sirketi) firması üzerinden test edeceğiz.Kullandığım editör Visual Studio Code,python versiyon 3.7.
Öncelikle borsa verilerini,
https://finance.yahoo.com/quote/GUBRF.IS?p=GUBRF.IS&.tsrc=fin-srch
Historical Data sekmesinden çalışma yapmak istediğimiz tarih aralığını seçerek verilerimizi .csv formatında ‘Download’ tıklayarak indiriyoruz. Bunu api aracılığıyla da yapabilirsiniz. İndirme işleminiz bittiğinde GUBRF.IS.csv isminde dosya bilgisayarınızda oluşacaktır.
Kullanacağımız Kütüphaneler
import numpy as np # temel işlemler
import pandas as pd # veri operasyonları için ekledim.
import os
import matplotlib.pyplot as plt # grafik, çizdirme vs.
from sklearn import preprocessing #linner regresyon için ekledim.
from sklearn.metrics import mean_squared_error #loss fonksiyon,hata ölçümü
#ilk veriyi okuyoruz
hisse_veri1=pd.read_csv("GUBRF.IS.csv")
hisse_veri1.head()
hisse_veri1.shape
hisse_veri1.isnull().sum()
Oluşan dosyanın içeriğine bakacak olursak,
245günlük veri , 2020-01-16 ile 2021-01-08 arasında.
Date : hisse senedinin işlem gördüğü gün
Open :Açılış fiyatı
High: Gün içinde hissenin ulaştığı en yüksek değer
Low: Gün içinde hissenin ulaştığı en düşük değer
Close : Hisse gün sonu kapanış fiyatı
Adj Close : Düzeltmeli kapanış
Volume : Hisse hacmi ( Emirlerde hisse senedi değer ve sayısı çarpımı)
hisse_veri1[“Close”][:‘2020’].plot(figsize=(16,4), legend=True)
hisse_veri1[“Close”][“2021”:].plot(figsize=(16,4), legend=True)
plt.legend([“Eğitim set (önce 2021)”, “Test seti (2020)”])
plt.title(“GUBRF Hisse Değeri”)
plt.show()

2020 yılını eğitim seti,2021 yılını da test seti olarak ayırarak işlem gerçekleştireceğiz.
print(hisse_veri1.describe())

Datamızı inceleyecek olursak pandas’ın describe() metodunu kullanarak
Open,High,Low,Close,Adj Close ve Volume değerlerinin toplam satır sayısı, ortalaması, standart sapması, minimum, maksimum değerlerinin yanı sıra
%25,%50 ve %75 gibi belirtilen değerlerin yüzde dilimlerinin o fiyatın üzerinde olduğunu göstermektedir.
Open High Low Close Adj Close Volume
count 245.000000 245.000000 245.000000 245.000000 245.000000 2.450000e+02
mean 28.229510 29.083184 27.458163 28.250694 28.250694 6.989810e+06
std 14.737932 15.269796 14.037277 14.709204 14.709204 7.687745e+06
min 8.450000 8.600000 8.340000 8.360000 8.360000 0.000000e+00
25% 16.010000 16.309999 15.710000 15.940000 15.940000 2.734124e+06
50% 27.799999 28.400000 27.219999 27.799999 27.799999 4.527484e+06
75% 34.020000 35.119999 33.400002 34.139999 34.139999 7.520533e+06
max 86.599998 88.599998 77.500000 86.150002 86.150002 5.361469e+07
hisse_veri1["Close"][:'2020'].plot(figsize=(16,4), legend=True)
hisse_veri1["Close"]["2021":].plot(figsize=(16,4), legend=True)
plt.legend(["Eğitim set (önce 2021)", "Test seti (2020)"])
plt.title("GUBRF Hisse Değeri")
plt.show()

X =data.loc[:,data.columns != 'Close' ] #hisse_veri3[['Open','High','Low','Volume']].to_numpy() #martrise çeviriyorum.
y = data['Close']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
Scikit-learn lineer regresyon modelini kullanıyoruz,
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
#tahminleme
y_pred=model.predict(X_test)
print (model.score(X_test, y_test))
plot_df=pd.DataFrame({'Gerçek Fiyat':y_test,'Tahmini Fiyat':y_pred})
plot_df.head(20).plot(kind='bar',figsize=(16,8))
plt.grid(which='major', linestyle='-', linewidth='0.5', color='green')
plt.grid(which='minor', linestyle=':', linewidth='0.5', color='black')
plt.show()

#Mean Square error of the prediction
from sklearn.metrics import mean_squared_error
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"Root mean squared error değeri {rmse}")
Root mean squared error değeri : 0.0650.065
Son olarak aşağıda gerçekleşen fiyat ile tahmin ettiğimiz değerleri tabloda gösterilmektedir.
Soldaki değerlerimiz index (date) değelerimiz.

Özellikle piyasada işlem yapanlarında aşina olacağı son sözümüz yazımız yatırım tavsiyesi değildir(ytd).
Soru ve iletişim için iletişim formundan bana ulaşabilirsiniz.
İlerleyen yazılarda görüşmek üzere.
Oğuz ALTUNTAŞ © 2021