├── .github
└── workflows
│ └── python-package.yml
├── .idea
├── .gitignore
├── Samsung_Stock_Analysis.iml
├── csv-editor.xml
├── discord.xml
├── inspectionProfiles
│ ├── Project_Default.xml
│ └── profiles_settings.xml
├── misc.xml
├── modules.xml
└── vcs.xml
├── LICENSE
├── README.md
├── data
└── Samsung Dataset.csv
├── reports
├── analysis.md
├── lstm_forecasting_results.md
└── samsung_stock_volume_forecast.md
├── requirements.txt
├── results
├── arima_forecast.png
├── close_adj_close.png
├── correlation_matrix.png
├── daily_returns.png
├── error_distribution.png
├── future_predictions.png
├── future_trend_analysis.png
├── kde_analysis.png
├── linear_regression_forecast.png
├── loss_curve.png
├── lstm_predictions.png
├── lstm_predictions_optimized.png
├── monthly_avg_price.png
├── monthly_returns.png
├── moving_averages.png
├── prophet_components.png
├── prophet_forecast.png
├── seasonal_decomposition.png
├── seasonal_trend_decomposition.png
├── simple_moving_average_forecast.png
├── trend_change_points.png
├── volatility_analysis.png
├── volume_ma30.png
├── volume_over_time.png
└── yearly_avg_price.png
└── scripts
├── data_analysis.py
├── lstm_forecasting.py
└── samsung_stock_volume_forecast.py
/.github/workflows/python-package.yml:
--------------------------------------------------------------------------------
1 | # This workflow will install Python dependencies, run tests and lint with a variety of Python versions
2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
3 |
4 | name: Python package
5 |
6 | on:
7 | push:
8 | branches: [ "main" ]
9 | pull_request:
10 | branches: [ "main" ]
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: ubuntu-latest
16 | strategy:
17 | fail-fast: false
18 | matrix:
19 | python-version: ["3.9", "3.10", "3.11"]
20 |
21 | steps:
22 | - uses: actions/checkout@v4
23 | - name: Set up Python ${{ matrix.python-version }}
24 | uses: actions/setup-python@v3
25 | with:
26 | python-version: ${{ matrix.python-version }}
27 | - name: Install dependencies
28 | run: |
29 | python -m pip install --upgrade pip
30 | python -m pip install flake8 pytest
31 | if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
32 | - name: Lint with flake8
33 | run: |
34 | # stop the build if there are Python syntax errors or undefined names
35 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
36 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
37 | flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
38 | - name: Test with pytest
39 | run: |
40 | pytest
41 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/Samsung_Stock_Analysis.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/csv-editor.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/discord.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
17 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Pınar
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 📊 Samsung Hisse Senedi Hacim ve Fiyat Tahmini Projesi
2 |
3 | ## 📖 Genel Bakış
4 |
5 | Bu projede, Samsung hisse senedi verileri kullanılarak çeşitli analizler ve tahmin modelleri geliştirilmiştir. Veri analizleri ve modeller, yatırımcıların ve piyasa analistlerinin karar alma süreçlerine yardımcı olmayı amaçlamaktadır.
6 |
7 | ## 📂 Proje Klasör Yapısı
8 |
9 | ```plaintext
10 | .
11 | ├── data
12 | │ └── Samsung Dataset.csv
13 | ├── results
14 | │ ├── volume_ma30.png
15 | │ ├── linear_regression_forecast.png
16 | │ ├── arima_forecast.png
17 | │ ├── seasonal_trend_decomposition.png
18 | │ ├── daily_returns.png
19 | │ ├── monthly_returns.png
20 | │ ├── volatility_analysis.png
21 | │ ├── lstm_predictions.png
22 | │ ├── lstm_residuals_histogram.png
23 | │ ├── lstm_future_forecast.png
24 | │ ├── lstm_train_test_plot.png
25 | │ ├── lstm_mse_plot.png
26 | │ ├── lstm_mae_plot.png
27 | │ ├── lstm_r2_plot.png
28 | │ ├── prophet_forecast.png
29 | │ ├── prophet_components.png
30 | │ ├── trend_change_points.png
31 | │ ├── kde_analysis.png
32 | │ └── volume_over_time.png
33 | ├── scripts
34 | │ ├── data_analysis.py
35 | │ ├── lstm_forecasting.py
36 | │ └── samsung_stock_volume_forecast.py
37 | ├── analysis.md
38 | └── samsung_stock_volume_forecast.md
39 | ```
40 | ## 📋 İçindekiler
41 |
42 | - [📖 Genel Bakış](#📖-genel-bakış)
43 | - [🔧 Kurulum](#🔧-kurulum)
44 | - [🚀 Kullanım](#🚀-kullanım)
45 | - [📝 Proje Adımları](#📝-proje-adımları)
46 | - [📊 Sonuçlar ve Değerlendirmeler](#📊-sonuçlar-ve-değerlendirmeler)
47 | - [📸 Görseller](#📸-görseller)
48 | - [Proje Hakkında](#proje-hakkında)
49 | - [Veri Seti Açıklaması](#veri-seti-açıklaması)
50 | - [Modeller ve Metodlar](#modeller-ve-metodlar)
51 | - [Gereksinimler](#gereksinimler)
52 | - [Sonuçların Yorumlanması](#sonuçların-yorumlanması)
53 | - [Gelecek Çalışmalar](#gelecek-çalışmalar)
54 | - [Yazarlar ve Katkıda Bulunanlar](#yazarlar-ve-katkıda-bulunanlar)
55 | - [Lisans](#lisans)
56 | -
57 | ## ⚙️ Kurulum
58 | Projeyi çalıştırmak için aşağıdaki adımları izleyebilirsiniz:
59 |
60 | 1. Gerekli kütüphaneleri yükleyin:
61 | ```sh
62 | pip install -r requirements.txt
63 | ```
64 | ## 🚀 Kullanım
65 | Projeyi çalıştırmak için aşağıdaki komutları kullanabilirsiniz:
66 |
67 | 1. Veri analizi ve görselleştirme için:
68 | ```sh
69 | python scripts/data_analysis.py
70 | ```
71 | 2. LSTM modeli ile fiyat tahmini için:
72 | ```sh
73 | python scripts/lstm_forecasting.py
74 | ```
75 | 3. Hacim tahmini ve diğer analizler için:
76 | ```sh
77 | python scripts/samsung_stock_volume_forecast.py
78 | ```
79 |
80 | ## 📊 Proje Adımları
81 |
82 | 1. **📂 Veri Yükleme ve Hazırlık:**
83 | - Veri setinin yüklenmesi ve eksik verilerin doldurulması.
84 |
85 | 2. **📈 Tarihsel Eğilimlerin Belirlenmesi:**
86 | - Hareketli ortalamalar ve diğer teknik analiz yöntemleri ile tarihsel eğilimlerin belirlenmesi.
87 |
88 | 3. **📊 Hacim Tahminleri:**
89 | - Lineer regresyon ve ARIMA modelleri kullanılarak hacim tahminlerinin yapılması.
90 |
91 | 4. **📅 Mevsimsellik ve Trend Analizi:**
92 | - Zaman serisi verilerinin dekompozisyonu ile mevsimsellik ve trend analizlerinin gerçekleştirilmesi.
93 |
94 | 5. **📉 Günlük ve Aylık Getiri Hesaplamaları:**
95 | - Günlük ve aylık getiri oranlarının hesaplanması ve görselleştirilmesi.
96 |
97 | 6. **📊 Volatilite Analizi:**
98 | - Hisse senedi fiyatlarının volatilitesinin analiz edilmesi.
99 |
100 | 7. **🤖 LSTM Modeli ile Fiyat Tahmini:**
101 | - LSTM modeli kullanılarak hisse senedi fiyatlarının tahmin edilmesi.
102 |
103 | ## 📝 Sonuçlar ve Değerlendirmeler
104 |
105 | ### 📈 Lineer Regresyon ve ARIMA Modelleri:
106 | - **Lineer Regresyon:**
107 | - Gelecekteki hacimleri tahmin etmek için kullanılmıştır.
108 | - **ARIMA Modeli:**
109 | - Yapılan tahminler, tarihsel verilerle karşılaştırıldığında daha yüksek doğruluk göstermiştir.
110 |
111 | ### 🤖 LSTM Modeli:
112 | - **Fiyat Tahminleri:**
113 | - Eğitim ve test veri setlerinde düşük hata oranları göstermiştir.
114 | - Model, gelecekteki 30 günlük fiyatları başarılı bir şekilde tahmin etmiştir.
115 |
116 | ## 🖼️ Görseller
117 |
118 | ### 📊 Hacim ve 30 Günlük Hareketli Ortalama
119 | 
120 |
121 | ### 📈 2024-2031 Yılları Arası Tahmin Edilen Toplam Hacim (Lineer Regresyon)
122 | 
123 |
124 | ### 📉 2024-2031 Yılları Arası Tahmin Edilen Toplam Hacim (ARIMA)
125 | 
126 |
127 | ### 🌦️ Mevsimsellik ve Trend Analizi
128 | 
129 |
130 | ### 📆 Günlük Getiriler
131 | 
132 |
133 | ### 📅 Aylık Getiriler
134 | 
135 |
136 | ### ⚡ Volatilite Analizi
137 | 
138 |
139 | ## 📊 Proje Hakkında
140 |
141 | Bu proje, **Samsung** hisse senedi verilerini analiz ederek ve çeşitli tahmin modelleri geliştirerek yatırımcılara ve piyasa analistlerine destek olmayı amaçlamaktadır. Projede, tarihsel veriler kullanılarak farklı zaman serisi analizleri ve makine öğrenimi modelleri uygulanmıştır.
142 |
143 | Proje kapsamındaki ana adımlar ve analizler şu şekildedir:
144 |
145 | 1. **Veri Yükleme ve Hazırlık**:
146 | - Samsung hisse senedi verileri `data` klasöründen yüklenmiştir.
147 | - Eksik veri noktaları doldurulmuş ve veriler iş günlerine göre frekans ayarlanmıştır.
148 |
149 | 2. **Tarihsel Eğilimlerin Belirlenmesi**:
150 | - Hisse senedi hacim verileri üzerinde 30 günlük hareketli ortalama hesaplanmıştır.
151 | - Tarihsel verilerin analizi ile uzun dönemli eğilimler belirlenmiştir.
152 |
153 | 3. **Hacim Tahminleri**:
154 | - **Lineer Regresyon** ve **ARIMA** modelleri kullanılarak gelecekteki hisse senedi hacimleri tahmin edilmiştir.
155 | - Modellerin performansı geçmiş verilerle karşılaştırılarak doğrulanmıştır.
156 |
157 | 4. **Mevsimsellik ve Trend Analizi**:
158 | - Zaman serisi verileri dekompoze edilerek mevsimsel bileşenler ve trendler analiz edilmiştir.
159 | - Bu analizler, hisse senedi fiyatlarındaki mevsimsel değişikliklerin ve genel eğilimlerin anlaşılmasına yardımcı olmuştur.
160 |
161 | 5. **Günlük ve Aylık Getiri Hesaplamaları**:
162 | - Günlük ve aylık getiri oranları hesaplanmış ve görselleştirilmiştir.
163 | - Bu hesaplamalar, hisse senedi performansının kısa ve uzun vadeli değerlendirmelerini sağlamıştır.
164 |
165 | 6. **Volatilite Analizi**:
166 | - Hisse senedi fiyatlarının volatilitesi 30 günlük hareketli standart sapma kullanılarak analiz edilmiştir.
167 | - Bu analiz, hisse senedinin risk seviyesini değerlendirmede önemli bir kriter olarak kullanılmıştır.
168 |
169 | 7. **LSTM Modeli ile Fiyat Tahmini**:
170 | - Derin öğrenme yöntemlerinden **LSTM** (Long Short-Term Memory) modeli kullanılarak hisse senedi fiyat tahminleri yapılmıştır.
171 | - Model, geçmiş fiyat verilerini kullanarak gelecekteki fiyatları yüksek doğrulukla tahmin etmiştir.
172 |
173 | Bu projede gerçekleştirilen analizler ve modeller, yatırımcılara ve analistlere hisse senedi piyasasında daha bilinçli ve veri odaklı kararlar almada yardımcı olmayı hedeflemektedir. Her adım, finansal analizde önemli olan farklı metrikleri ve modelleri kapsamaktadır.
174 |
175 | ## 🗂️ Veri Seti Açıklaması
176 |
177 | Veri seti, **Samsung** hisse senedi fiyatlarına ve hacim verilerine ait bilgileri içermektedir. Veriler, belirli bir zaman aralığında günlük olarak kaydedilmiştir ve aşağıdaki sütunları içermektedir:
178 |
179 | - **Date (Tarih)**:
180 | - Hisse senedi verilerinin kaydedildiği tarih.
181 | - Format: YYYY-MM-DD
182 |
183 | - **Open (Açılış Fiyatı)**:
184 | - Hisse senedinin gün içindeki açılış fiyatı.
185 | - Açılış seansındaki ilk işlem fiyatını gösterir.
186 |
187 | - **High (Gün İçi En Yüksek Fiyat)**:
188 | - Hisse senedinin gün içinde ulaştığı en yüksek fiyat.
189 | - Gün içindeki en yüksek işlem fiyatını gösterir.
190 |
191 | - **Low (Gün İçi En Düşük Fiyat)**:
192 | - Hisse senedinin gün içinde ulaştığı en düşük fiyat.
193 | - Gün içindeki en düşük işlem fiyatını gösterir.
194 |
195 | - **Close (Kapanış Fiyatı)**:
196 | - Hisse senedinin gün içindeki kapanış fiyatı.
197 | - Kapanış seansındaki son işlem fiyatını gösterir.
198 |
199 | - **Adj Close (Düzeltilmiş Kapanış Fiyatı)**:
200 | - Hisse senedinin kapanış fiyatının, bölünme ve temettü gibi olaylar sonrası düzeltilmiş hali.
201 | - Gerçek değer üzerinden daha doğru bir fiyat analizi sağlar.
202 |
203 | - **Volume (Hacim)**:
204 | - Gün içindeki toplam hisse senedi işlem adedi.
205 | - Hisse senedinin likiditesi ve işlem yoğunluğu hakkında bilgi verir.
206 |
207 | Bu veri seti, hisse senedi performansının günlük bazda detaylı analizini yapmayı mümkün kılmakta ve finansal modellerin oluşturulmasında kullanılmaktadır. Tarihsel fiyat hareketleri ve hacim bilgileri, yatırım kararlarının alınmasında ve piyasa analizlerinde önemli bir rol oynamaktadır.
208 |
209 | ## 📊 Modeller ve Metodlar
210 |
211 | Bu projede, Samsung hisse senedi verilerini analiz etmek ve tahmin modelleri geliştirmek için çeşitli modeller ve metodlar kullanılmıştır. Her bir model, belirli bir amaca yönelik olarak seçilmiş ve uygulanmıştır. Aşağıda, projede kullanılan modeller ve metodlar hakkında detaylı bilgiler verilmiştir:
212 |
213 | ### 1. 📈 Lineer Regresyon
214 | - **Amaç**: Gelecek yıllardaki hacim tahminleri.
215 | - **Açıklama**: Lineer regresyon modeli, bağımlı değişken (hacim) ile bağımsız değişken (yıl) arasındaki doğrusal ilişkiyi modelleyerek gelecekteki hacim değerlerini tahmin eder. Bu model, geçmiş yıllardaki hacim verilerini kullanarak gelecek yıllara yönelik tahminler oluşturur.
216 |
217 | ### 2. ⏳ ARIMA (AutoRegressive Integrated Moving Average)
218 | - **Amaç**: Zaman serisi verilerinin analizi ve tahminler.
219 | - **Açıklama**: ARIMA modeli, geçmiş değerler ve hata terimlerini kullanarak zaman serisi verilerini modelleyen bir yöntemdir. ARIMA modeli, hisse senedi hacim verilerinin trend, mevsimsellik ve düzensizlik gibi bileşenlerini analiz ederek gelecekteki değerleri tahmin eder. Bu model, özellikle finansal zaman serilerinde yaygın olarak kullanılmaktadır.
220 |
221 | ### 3. 🤖 LSTM (Long Short-Term Memory)
222 | - **Amaç**: Hisse senedi fiyatlarının tahmini.
223 | - **Açıklama**: LSTM, derin öğrenme alanında kullanılan bir tür tekrarlayan sinir ağı (RNN) modelidir. LSTM modeli, uzun süreli bağımlılıkları öğrenme kapasitesine sahip olduğu için zaman serisi tahminlerinde etkili sonuçlar verir. Bu projede, LSTM modeli hisse senedi fiyatlarının tahmin edilmesi için kullanılmıştır. Model, geçmiş fiyat verilerini kullanarak gelecekteki fiyat hareketlerini tahmin eder.
224 |
225 | Her bir modelin uygulanması, veri hazırlama, model eğitimi, tahmin yapma ve sonuçların değerlendirilmesi adımlarını içermektedir. Bu modeller, hisse senedi verilerinin analiz edilmesi ve yatırım kararlarının desteklenmesi amacıyla kullanılmıştır.
226 |
227 | ## 📋 Gereksinimler
228 |
229 | Projeyi çalıştırmak ve analizleri gerçekleştirmek için aşağıdaki gereksinimlere sahip olmanız gerekmektedir:
230 |
231 | ### Python Sürümü
232 | - **Python 3.11**: Bu proje, Python 3.11 sürümünde çalışacak şekilde yapılandırılmıştır. Python'un bu sürümünün sisteminize kurulu olduğundan emin olun.
233 |
234 | ### Gerekli Python Kütüphaneleri
235 | Projede kullanılan tüm kütüphaneler `requirements.txt` dosyasında belirtilmiştir. Gerekli kütüphaneleri kurmak için aşağıdaki adımları takip edebilirsiniz:
236 |
237 | 1. **Virtual Environment (Sanal Ortam) Oluşturma**:
238 | - Proje klasörünüzde bir sanal ortam oluşturun ve etkinleştirin.
239 | ```bash
240 | python -m venv venv
241 | source venv/bin/activate # MacOS/Linux
242 | venv\Scripts\activate # Windows
243 | ```
244 |
245 | 2. **Gerekli Kütüphaneleri Kurma**:
246 | - `requirements.txt` dosyasındaki bağımlılıkları kurmak için aşağıdaki komutu çalıştırın.
247 | ```bash
248 | pip install -r requirements.txt
249 | ```
250 |
251 | ### Kütüphaneler Listesi
252 | - `pandas`: Veri manipülasyonu ve analizi için.
253 | - `numpy`: Sayısal hesaplamalar ve veri işlemleri için.
254 | - `matplotlib`: Veri görselleştirme için.
255 | - `seaborn`: İleri düzey veri görselleştirme için.
256 | - `statsmodels`: İstatistiksel modelleme ve zaman serisi analizi için.
257 | - `scikit-learn`: Makine öğrenimi algoritmaları ve araçları için.
258 | - `tensorflow`: Derin öğrenme modelleri (LSTM) için.
259 | - `prophet`: Zaman serisi tahminleri için.
260 | - `ruptures`: Değişim noktası tespiti için.
261 |
262 | ### Ek Gereksinimler
263 | - **Veri Seti**: Samsung hisse senedi verileri, `data` klasöründe yer almalıdır. İlgili veri setini indirin ve `data` klasörüne yerleştirin.
264 |
265 | Bu gereksinimleri karşıladığınızda, projeyi başarıyla çalıştırabilir ve analizleri gerçekleştirebilirsiniz.
266 |
267 | ## 📈 Sonuçların Yorumlanması
268 |
269 | Projede elde edilen sonuçlar, farklı modellerin performansını ve tahmin doğruluğunu değerlendirmektedir. Aşağıda, kullanılan modeller ve elde edilen sonuçlarla ilgili detaylı yorumlar bulunmaktadır:
270 |
271 | ### Lineer Regresyon ve ARIMA Modelleri
272 | - **Lineer Regresyon**: Gelecek yıllardaki hacimleri tahmin etmek için kullanılan bu model, tarihsel verilere dayalı olarak makul tahminler üretmiştir. Ancak, lineer regresyon modelinin sınırlamaları göz önüne alındığında, trend ve mevsimsellik gibi zaman serisi bileşenlerini yeterince iyi yakalayamayabilir.
273 | - **ARIMA**: ARIMA modeli, zaman serisi verilerinin analizinde ve tahmininde daha sofistike bir yaklaşımdır. Mevsimsellik ve trend gibi bileşenleri dikkate alarak daha yüksek doğrulukta tahminler yapmıştır. ARIMA modelinin sağladığı tahminler, tarihsel verilerle uyumlu ve güvenilirdir.
274 |
275 | ### LSTM Modeli
276 | - **LSTM (Long Short-Term Memory)**: Derin öğrenme tabanlı bu model, zaman serisi verilerinde uzun vadeli bağımlılıkları yakalama yeteneğine sahiptir. Eğitim ve test veri setlerinde düşük hata oranları göstermiş ve gelecekteki 30 günlük fiyatları yüksek doğrulukla tahmin etmiştir. LSTM modeli, özellikle karmaşık zaman serisi verileri için güçlü bir tahmin aracı olarak öne çıkmaktadır.
277 |
278 | ## 🔍 Gelecek Çalışmalar
279 |
280 | Projede geliştirilen modellerin performansını artırmak ve daha doğru tahminler yapmak için aşağıdaki çalışmalar yapılabilir:
281 |
282 | - **Daha Fazla Veri Toplamak ve Modeli Genişletmek**: Daha geniş ve çeşitli veri setleri kullanarak modelin genelleme yeteneği artırılabilir.
283 | - **Diğer Makine Öğrenimi Algoritmaları ve Derin Öğrenme Modellerini Denemek**: RNN, GRU gibi farklı derin öğrenme modelleri ve XGBoost, Random Forest gibi makine öğrenimi algoritmaları da denenebilir.
284 | - **Model Optimizasyonu ve Hiperparametre Ayarlarını Geliştirmek**: Grid Search, Random Search gibi yöntemlerle hiperparametre optimizasyonu yapılarak modelin performansı artırılabilir.
285 |
286 | ## 📞 İletişim
287 |
288 | Proje ile ilgili herhangi bir sorunuz, öneriniz veya geri bildiriminiz varsa, lütfen aşağıdaki iletişim bilgilerini kullanarak bizimle iletişime geçin:
289 |
290 | - **Proje Sahibi**: İsim Soyisim
291 | - **E-posta**: piinartp@gmail.com
292 | - **LinkedIn**: [linkedin.com/in/piinartp](https://linkedin.com/in/piinartp)
293 | - **GitHub**: [github.com/ThecoderPinar](https://github.com/ThecoderPinar)
294 |
295 | ## 👥 Geliştirici
296 |
297 | - **Pınar Topuz** - Proje Sahibi ve Baş Geliştirici
298 |
299 | Bu projede emeği geçen herkese teşekkür ederiz. Projeye katkıda bulunmak isteyenler, lütfen yukarıdaki iletişim bilgilerini kullanarak bizimle iletişime geçin.
300 |
301 | ---
302 |
303 | Geri bildiriminiz bizim için çok değerli. Projemize katkıda bulunmak isteyenler, lütfen yukarıdaki iletişim bilgilerini kullanarak bizimle iletişime geçmekten çekinmeyin. Teşekkürler!
304 | # S a m s u n g _ S t o c k _ A n a l y s i s _ F o r e c a s t i n g _ a n d _ V o l a t i l i t y _ A n a l y s i s
305 |
306 |
307 |
--------------------------------------------------------------------------------
/reports/analysis.md:
--------------------------------------------------------------------------------
1 | # 📈 Samsung Hisse Analizi
2 |
3 | ## Genel Bakış
4 | Bu proje, Samsung'un hisse verilerinin kapsamlı bir analizini içermektedir. Analiz, zaman serisi ayrıştırması, korelasyon analizi, hareketli ortalamalar, SARIMA ve Prophet tahmini, trend değişim tespiti ve volatilite analizini kapsamaktadır. Sonuçlar görselleştirilmiş ve `results` dizininde saklanmıştır.
5 |
6 | ## Veri Ön İşleme
7 | - **📅 Eksik Değerler**: Veri kümesi eksik değerler açısından kontrol edilmiş ve varsa ileri doldurma yöntemiyle doldurulmuştur.
8 | - **🕒 Tarih Dönüştürme**: Tarih sütunu datetime formatına dönüştürülmüş ve indeks olarak ayarlanmıştır.
9 |
10 | ## Keşifsel Veri Analizi
11 | 1. **🔍 Betimsel İstatistikler**: Verilerin temel istatistikleri hesaplanmıştır.
12 | 2. **📊 Korelasyon Matrisi**: Farklı hisse metrikleri arasındaki korelasyon hesaplanmış ve görselleştirilmiştir.
13 | 3. **🚨 Aykırı Değer Tespiti**: Z-skorları kullanılarak aykırı değerler tespit edilmiştir.
14 |
15 | ## Zaman Serisi Analizi
16 | 1. **📈 Kapanış ve Düzeltilmiş Kapanış Fiyatları**: Kapanış ve düzeltilmiş kapanış fiyatlarının zaman serisi çizilmiştir.
17 | 
18 | 2. **📉 Hareketli Ortalamalar**: 20 günlük ve 100 günlük hareketli ortalamalar hesaplanmış ve çizilmiştir.
19 | 
20 | 3. **🌀 Mevsimsel Ayrıştırma**: Veriler trend, mevsimsel ve artık bileşenlere ayrıştırılmıştır.
21 | 
22 | 4. **📅 Getiriler**: Günlük ve aylık getiriler hesaplanmış ve görselleştirilmiştir.
23 | 
24 | 
25 | 5. **📉 Volatilite**: 30 günlük hareketli volatilite hesaplanmış ve çizilmiştir.
26 | 
27 |
28 | ## Tahmin
29 | 1. **📊 SARIMA Modeli**: Son 2 yılın verileri üzerine bir SARIMA modeli kurulmuş ve önümüzdeki 30 gün tahmin edilmiştir.
30 | 
31 |
32 | - SARIMA modeli, zaman serisi verilerindeki mevsimsellik ve trendi dikkate alarak gelecekteki fiyatları tahmin eder.
33 | - Tahminler, gelecekteki fiyat hareketleri hakkında bilgi sağlar ve yatırım kararlarını destekler.
34 |
35 | 2. **📈 Prophet Modeli**: Prophet modeli veriler üzerine kurulmuş ve bir yıl ileriye yönelik tahminler yapılmıştır. Tahminler ve bileşen grafikleri çizilmiştir.
36 | 
37 | 
38 |
39 | - Prophet modeli, zaman serisi verilerinde trend ve mevsimselliği dikkate alarak tahmin yapar.
40 | - Bileşen grafikleri, tahminlerin hangi faktörlerden etkilendiğini gösterir.
41 |
42 | ## İleri Düzey Analiz
43 | 1. **📈 Trend Değişimi Tespiti**: `ruptures` kütüphanesi kullanılarak trend değişim noktaları tespit edilmiş ve görselleştirilmiştir.
44 | 
45 |
46 | - Trend değişim noktaları, hisse fiyatlarında önemli değişikliklerin olduğu dönemleri gösterir.
47 | - Bu noktalar, yatırımcılar için önemli alım veya satım fırsatlarını işaret edebilir.
48 |
49 | 2. **📊 KDE Analizi**: Kapanış fiyatlarının yoğunluk dağılımı Kernel Yoğunluk Tahmini kullanılarak analiz edilmiştir.
50 | 
51 |
52 | - KDE analizi, hisse fiyatlarının dağılımını gösterir.
53 | - Fiyatların yoğunlaştığı bölgeler, destek ve direnç seviyeleri hakkında bilgi verebilir.
54 |
55 | 3. **📉 Hacim Analizi**: İşlem hacminin zaman içindeki değişimi analiz edilmiş ve çizilmiştir.
56 | 
57 |
58 | - Hacim analizi, piyasa katılımcılarının hisse senedine olan ilgisini gösterir.
59 | - Yüksek hacim, likiditenin arttığını ve fiyat hareketlerinin daha güvenilir olduğunu gösterir.
60 |
61 |
62 | ## Sonuçlar ve Öneriler
63 | - **🔍 Betimsel İstatistikler**: Özet istatistikler, hisse verilerinin merkezi eğilim ve dağılımı hakkında bilgi sağlar.
64 | - **📊 Korelasyon Matrisi**: Korelasyonların görsel temsili, farklı hisse metrikleri arasındaki ilişkileri anlamaya yardımcı olur.
65 | 
66 | - **📈 Hareketli Ortalamalar**: Hareketli ortalamaların kapanış fiyatları ile birlikte çizilmesi, trendlerin belirlenmesinde ve kısa vadeli dalgalanmaların düzleştirilmesinde yardımcı olur.
67 | - **🌀 Mevsimsel Ayrıştırma**: Zaman serisi verilerinin trend, mevsimsel ve artık bileşenlere ayrıştırılması, altında yatan modelleri anlamaya yardımcı olur.
68 | - **📅 Getiriler ve Volatilite**: Getiriler ve volatilitenin analizi, hissenin risk ve getiri profili hakkında bilgi sağlar.
69 | - **📊 Tahmin**: Hem SARIMA hem de Prophet modelleri, gelecekteki fiyat tahminleri sağlar ve öngörücü analizlerde yardımcı olur.
70 | - **📈 Trend Değişimi Tespiti**: Trend değişimlerinin tespiti, hisse fiyatı hareketlerindeki önemli değişimleri anlamaya yardımcı olur.
71 | - **📊 KDE ve Hacim Analizi**: Ek analizler, fiyat dağılımları ve işlem hacimleri hakkında daha derinlemesine bilgi sağlar.
72 |
73 | ### Öneriler
74 |
75 | 1. **📈 Yatırım Stratejileri**
76 | - **Kısa Vadeli Yatırım**: Hareketli ortalamalar ve kısa vadeli tahminler (SARIMA ve Basit Hareketli Ortalama) kısa vadeli yatırım stratejilerini destekleyebilir. Özellikle 20 günlük ve 100 günlük hareketli ortalamalar, kısa vadeli alım-satım kararları için kullanılabilir.
77 | - **Uzun Vadeli Yatırım**: Prophet modelinden elde edilen uzun vadeli tahminler, uzun vadeli yatırımcılar için değerli olabilir. Gelecek bir yıl içinde hisse fiyatlarının genel trendini gözlemleyerek uzun vadeli alım kararları alınabilir.
78 |
79 | 2. **🚨 Risk Yönetimi**
80 | - **Volatilite Analizi**: 30 günlük hareketli volatilite analizine dayanarak, yatırımcılar hisse senedinin risk profilini değerlendirebilir ve buna göre risk yönetimi stratejileri geliştirebilir. Yüksek volatilite dönemlerinde daha dikkatli olunmalı ve stop-loss emirleri kullanılmalıdır.
81 | - **Trend Değişimi**: Trend değişim noktalarının tespiti, hisse fiyatlarında ani değişiklikler olabileceğini gösterir. Bu dönemlerde piyasaları yakından takip etmek ve gerektiğinde pozisyonları gözden geçirmek önemlidir.
82 |
83 | 3. **🌀 Sezonluk ve Mevsimsel Fırsatlar**
84 | - **Mevsimsel Ayrıştırma**: Mevsimsel bileşenler, belirli dönemlerde hisse fiyatlarının mevsimsel olarak nasıl değiştiğini gösterir. Bu bilgi, sezonluk yatırım fırsatlarını değerlendirmek için kullanılabilir.
85 | - **Yıllık ve Aylık Ortalamalar**: Aylık ve yıllık ortalama fiyat analizleri, belirli dönemlerdeki fiyat trendlerini gösterir. Özellikle belirli aylarda düzenli olarak fiyat artışları veya düşüşleri varsa, bu dönemler yatırım kararlarında dikkate alınabilir.
86 |
87 | 4. **📊 Hacim Analizi**
88 | - **Hacim Verilerinin Değerlendirilmesi**: İşlem hacmindeki değişiklikler, piyasa katılımcılarının hisse senedine olan ilgisini yansıtır. Yüksek hacim dönemlerinde likiditenin artması, büyük alım-satım işlemleri için uygun olabilir.
89 | - **Hacim ve Fiyat İlişkisi**: Hacim verileri ile fiyat hareketleri arasındaki ilişkiyi analiz ederek, hacim bazlı stratejiler geliştirilebilir. Örneğin, hacimde ani artışlar fiyat değişikliklerinin habercisi olabilir.
90 |
91 | 5. **📈 Teknik Analiz ve Göstergeler**
92 | - **Teknik Göstergeler**: Kapanış fiyatlarının KDE analizi, fiyatların yoğunluk dağılımını gösterir. Bu bilgi, destek ve direnç seviyelerinin belirlenmesinde kullanılabilir.
93 | - **Korelasyon Analizi**: Farklı hisse senedi metrikleri arasındaki korelasyonlar, çeşitli teknik göstergelerin birlikte nasıl çalıştığını anlamaya yardımcı olabilir. Bu, daha karmaşık ticaret stratejileri geliştirmek için kullanılabilir.
94 |
95 | 6. **📅 Gelecek Beklentiler ve Stratejik Planlama**
96 | - **Prophet Tahminleri**: Prophet modelinden elde edilen bir yıllık fiyat tahminleri, gelecekteki fiyat hareketlerini öngörmek için kullanılabilir. Bu tahminler, uzun vadeli yatırım ve stratejik planlama için değerli bilgiler sağlar.
97 | - **Trend Analizi**: Uzun vadeli trendlerin belirlenmesi, şirketin genel performansı ve piyasa koşulları hakkında fikir verir. Bu bilgiler, stratejik yatırım kararları almak için kullanılabilir.
98 |
99 | ## Görseller
100 | Tüm görseller `results` dizininde saklanmıştır ve daha detaylı incelemeler için kullanılabilir.
101 |
102 | ## Analizi Çalıştırma
103 | Analizi çalıştırmak için `scripts/data_analysis.py` dosyasını çalıştırın:
104 |
105 | ```bash
106 | python scripts/data_analysis.py
107 | ```
--------------------------------------------------------------------------------
/reports/lstm_forecasting_results.md:
--------------------------------------------------------------------------------
1 | # 📊 Samsung Hisse Senedi Fiyat Tahmini
2 |
3 | ## Genel Bakış 🌟
4 | Bu proje, Samsung hisse senedi fiyatlarının geçmiş verilerini kullanarak LSTM (Long Short-Term Memory) modeli ile gelecekteki fiyatlarını tahmin etmeyi amaçlamaktadır. Proje, veri ön işleme, model oluşturma, model eğitimi ve geleceğe yönelik tahminler adımlarını içermektedir.
5 |
6 | ## Neler Yaptık 🔍
7 | 1. **Veri Ön İşleme**:
8 | - Veri seti yüklendi ve tarih sütunu datetime formatına dönüştürüldü.
9 | - Kapanış fiyatları seçildi ve veriler ölçeklendirildi.
10 | - Eğitim ve test verileri ayrıldı ve LSTM modeli için uygun hale getirildi.
11 | 2. **Model Oluşturma ve Eğitim**:
12 | - İki katmanlı LSTM modeli oluşturuldu.
13 | - Model, eğitim verileri üzerinde 5 epoch boyunca eğitildi.
14 | - Modelin performansı RMSE, MAE, MAPE ve R² metrikleri kullanılarak değerlendirildi.
15 | 3. **Tahmin Değerlendirme**:
16 | - Modelin eğitim ve test verileri üzerindeki performansı değerlendirildi.
17 | - Gelecek 30 gün için fiyat tahminleri yapıldı.
18 |
19 | ## Tahmin Değerlendirme 📈
20 | - **Train RMSE**: 851.91
21 | - **Test RMSE**: 2840.27
22 | - **Train MAE**: 613.94
23 | - **Test MAE**: 2294.21
24 | - **Train MAPE**: 3.77
25 | - **Test MAPE**: 3.35
26 | - **Train R²**: 0.9956
27 | - **Test R²**: 0.9202
28 | - **Train Accuracy**: 45.99%
29 | - **Test Accuracy**: 46.62%
30 |
31 | ## Sonuçlar ve Öneriler 📝
32 | - **Model Performansı**: Model, eğitim verileri üzerinde oldukça iyi bir performans gösterdi, ancak test verilerindeki performansı daha düşük. Bu, modelin aşırı öğrenme (overfitting) yapmış olabileceğini gösterir.
33 | - **Gelecek 30 Gün Tahminleri**: Modelin tahminleri, mevcut trendlere dayalı olarak makul seviyelerde. Ancak, bu tahminlerin doğruluğunu artırmak için daha fazla veri ve özellik kullanılabilir.
34 | - **Geliştirme Önerileri**:
35 | - **Daha Fazla Veri**: Modelin doğruluğunu artırmak için daha fazla geçmiş veri kullanılabilir.
36 | - **Hiperparametre Optimizasyonu**: Modelin hiperparametrelerini optimize ederek daha iyi performans elde edilebilir.
37 | - **Ek Özellikler**: Ekonomik göstergeler, sektörel haberler ve piyasa duyarlılığı gibi ek özellikler modelin performansını artırabilir.
38 | - **Gelişmiş Modeller**: GRU veya Transformer gibi daha gelişmiş modeller kullanılarak performans iyileştirilebilir.
39 |
40 | ## Görseller 📊
41 |
42 | ### Gerçek ve Tahmin Edilen Hisse Fiyatları
43 | 
44 | Bu grafik, gerçek hisse senedi fiyatları ile modelin eğitim ve test verileri üzerindeki tahminlerini karşılaştırmaktadır.
45 |
46 | ### Gelecek 30 Gün Tahminleri
47 | 
48 | Bu grafik, modelin gelecek 30 gün için tahmin ettiği hisse senedi fiyatlarını göstermektedir.
49 |
50 | ### Eğitim ve Test Hataları
51 | 
52 | Bu grafik, modelin eğitim ve test verileri üzerindeki hatalarını göstermektedir. Hataların dağılımı, modelin performansını değerlendirmek için önemlidir.
53 |
54 | ### Hata Dağılımı
55 | 
56 | Bu grafik, modelin tahmin hatalarının dağılımını göstermektedir. Hata dağılımı, modelin doğruluğunu ve güvenilirliğini değerlendirmek için kullanılır.
57 |
58 | ---
59 |
60 | Bu çalışma, Samsung hisse senedi fiyatlarının tahmini konusunda derin öğrenme tekniklerinin potansiyelini göstermektedir. Modelin performansını daha da artırmak için yukarıda belirtilen geliştirme önerileri dikkate alınmalıdır.
61 |
62 | ## Görseller
63 | Tüm görseller `results` dizininde saklanmıştır ve daha detaylı incelemeler için kullanılabilir.
64 |
65 | ## Analizi Çalıştırma
66 | Analizi çalıştırmak için `scripts/samsung_stock_volume_forecast.py` dosyasını çalıştırın:
67 |
68 | ```bash
69 | python scripts/data_analysis.py
70 | ```
--------------------------------------------------------------------------------
/reports/samsung_stock_volume_forecast.md:
--------------------------------------------------------------------------------
1 | ### 📊 Samsung Hisse Senedi Hacim Tahmini
2 |
3 | ---
4 |
5 | ## Genel Bakış 🌟
6 |
7 | Bu proje, Samsung hisse senedi hacim verilerini kullanarak gelecekteki hacim tahminlerini yapmayı amaçlamaktadır. Çalışmada veri yükleme ve hazırlık, tarihsel eğilimlerin belirlenmesi, çeşitli modellerle hacim tahminleri ve mevsimsellik ve trend analizleri yapılmıştır. Bu analizler, yatırımcılar ve piyasa analistleri için değerli içgörüler sunmayı hedeflemektedir.
8 |
9 | ---
10 |
11 | ## Neler Yaptık 🔍
12 |
13 | 1. **Veri Yükleme ve Hazırlık**:
14 | - Veri seti yüklendi ve tarih sütunu datetime formatına dönüştürüldü.
15 | - Hacim verileri iş günlerine göre frekans ayarlandı ve eksik değerler ileri doldurma yöntemiyle tamamlandı.
16 |
17 | 2. **Tarihsel Eğilimlerin Belirlenmesi**:
18 | - 30 günlük hareketli ortalama hesaplandı ve görselleştirildi.
19 |
20 | 3. **Hacim Tahminleri**:
21 | - **Lineer Regresyon Modeli** kullanılarak 2024-2031 yılları için hacim tahminleri yapıldı.
22 | - **ARIMA Modeli** kullanılarak 2024-2031 yılları için hacim tahminleri yapıldı.
23 |
24 | 4. **Mevsimsellik ve Trend Analizi**:
25 | - Additif model kullanarak mevsimsel decompose işlemi yapıldı.
26 |
27 | 5. **Günlük ve Aylık Getiri Hesaplamaları**:
28 | - Günlük ve aylık getiri hesaplamaları yapıldı ve görselleştirildi.
29 |
30 | 6. **Volatilite Analizi**:
31 | - 30 günlük volatilite hesaplandı ve görselleştirildi.
32 |
33 | ---
34 |
35 | ## Adımlar 🔨
36 |
37 | 1. **Veri Yükleme ve Hazırlık**
38 | - `pandas` ve `numpy` kullanarak veri yüklendi ve ön işlemden geçirildi.
39 | - Eksik veriler ileri doldurma yöntemiyle tamamlandı.
40 |
41 | 2. **Hareketli Ortalama Analizi**
42 | - Hisse senedi hacmi ve 30 günlük hareketli ortalama hesaplandı.
43 | - Grafiklerle görselleştirildi.
44 |
45 | 3. **Hacim Tahmin Modelleri**
46 | - Lineer regresyon modeli oluşturuldu ve tahminler yapıldı.
47 | - ARIMA modeli kullanılarak daha gelişmiş tahminler yapıldı.
48 |
49 | 4. **Mevsimsellik ve Trend Analizi**
50 | - Mevsimsel ve trend bileşenleri ayrıştırıldı ve analiz edildi.
51 |
52 | 5. **Getiri ve Volatilite Analizi**
53 | - Günlük ve aylık getiri hesaplamaları yapıldı.
54 | - 30 günlük volatilite analizi yapıldı.
55 |
56 | ---
57 |
58 | ## Tahmin Değerlendirme 📈
59 |
60 | ### Lineer Regresyon Modeli ile Hacim Tahmini
61 |
62 | | Yıl | Tahmin Edilen Hacim |
63 | |------|-----------------------|
64 | | 2024 | 1.924352e+09 |
65 | | 2025 | 1.638576e+09 |
66 | | 2026 | 1.352801e+09 |
67 | | 2027 | 1.067026e+09 |
68 | | 2028 | 7.812506e+08 |
69 | | 2029 | 4.954753e+08 |
70 | | 2030 | 2.097000e+08 |
71 | | 2031 | -7.607531e+07 |
72 |
73 | ### ARIMA Modeli ile Hacim Tahmini
74 |
75 | | Yıl | Tahmin Edilen Hacim |
76 | |------|-----------------------|
77 | | 2024 | 1.879584e+09 |
78 | | 2025 | 1.643756e+09 |
79 | | 2026 | 1.397928e+09 |
80 | | 2027 | 1.152100e+09 |
81 | | 2028 | 9.062724e+08 |
82 | | 2029 | 6.604445e+08 |
83 | | 2030 | 4.146166e+08 |
84 | | 2031 | 1.687887e+08 |
85 |
86 | ---
87 |
88 | ## Sonuçlar 📝
89 |
90 | ### Model Performansı
91 |
92 | - **Lineer Regresyon Modeli**: Doğrusal modeller karmaşık piyasa dinamiklerini yeterince yakalayamayabilir.
93 | - **ARIMA Modeli**: Mevsimsellik ve trend bileşenlerini dikkate alarak daha doğru tahminler yapabilir.
94 |
95 | ### Geliştirme Önerileri
96 |
97 | - **Ek Özellikler**: Ekonomik göstergeler ve piyasa duyarlılığı gibi ek özellikler modelin performansını artırabilir.
98 | - **Daha Fazla Veri**: Daha fazla veri kullanılarak modelin doğruluğu artırılabilir.
99 | - **Gelişmiş Modeller**: GRU veya Transformer gibi daha gelişmiş modeller kullanılarak performans iyileştirilebilir.
100 |
101 | ---
102 |
103 | ## Görseller 📊
104 |
105 | ### Hacim ve 30 Günlük Hareketli Ortalama
106 | 
107 |
108 | Bu grafik, hisse senedi hacmi ve 30 günlük hareketli ortalamayı göstermektedir.
109 |
110 | ---
111 |
112 | ### Lineer Regresyon Modeli ile Tahmin Edilen Hacim (2024-2031)
113 | 
114 |
115 | Bu grafik, 2024-2031 yılları arasındaki tahmin edilen toplam hacmi göstermektedir.
116 |
117 | ---
118 |
119 | ### ARIMA Modeli ile Tahmin Edilen Hacim (2024-2031)
120 | 
121 |
122 | Bu grafik, ARIMA modeli kullanılarak tahmin edilen 2024-2031 yılları arasındaki toplam hacmi göstermektedir.
123 |
124 | ---
125 |
126 | ### Mevsimsellik ve Trend Analizi
127 | 
128 |
129 | Bu grafik, hisse senedi hacmindeki mevsimsellik ve trendleri göstermektedir.
130 |
131 | ---
132 |
133 | ### Günlük Getiriler
134 | 
135 |
136 | Bu grafik, hisse senedi hacmindeki günlük getirileri göstermektedir.
137 |
138 | ---
139 |
140 | ### Aylık Getiriler
141 | 
142 |
143 | Bu grafik, hisse senedi hacmindeki aylık getirileri göstermektedir.
144 |
145 | ---
146 |
147 | ### 30 Günlük Volatilite
148 | 
149 |
150 | Bu grafik, hisse senedi hacmindeki 30 günlük volatiliteyi göstermektedir.
151 |
152 | ---
153 |
154 | ## Analizi Çalıştırma
155 | Analizi çalıştırmak için `scripts/samsung_stock_volume_forecast.py` dosyasını çalıştırın:
156 |
157 | ```bash
158 | python scripts/data_analysis.py
159 | ```
160 |
161 | Bu çalışma, Samsung hisse senedi hacim tahmininde zaman serisi analizlerinin ve çeşitli modellerin kullanımının potansiyelini göstermektedir. Model performansını daha da artırmak için yukarıda belirtilen geliştirme önerileri dikkate alınmalıdır.
162 |
163 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | pandas~=2.2.2
2 | matplotlib~=3.8.4
3 | seaborn~=0.13.2
4 | statsmodels~=0.14.2
5 | scipy~=1.13.0
6 | prophet~=1.1.5
7 | ruptures~=1.1.9
8 | numpy~=1.26.4
9 | scikit-learn~=1.4.2
10 | tensorflow~=2.16.1
11 |
--------------------------------------------------------------------------------
/results/arima_forecast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/arima_forecast.png
--------------------------------------------------------------------------------
/results/close_adj_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/close_adj_close.png
--------------------------------------------------------------------------------
/results/correlation_matrix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/correlation_matrix.png
--------------------------------------------------------------------------------
/results/daily_returns.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/daily_returns.png
--------------------------------------------------------------------------------
/results/error_distribution.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/error_distribution.png
--------------------------------------------------------------------------------
/results/future_predictions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/future_predictions.png
--------------------------------------------------------------------------------
/results/future_trend_analysis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/future_trend_analysis.png
--------------------------------------------------------------------------------
/results/kde_analysis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/kde_analysis.png
--------------------------------------------------------------------------------
/results/linear_regression_forecast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/linear_regression_forecast.png
--------------------------------------------------------------------------------
/results/loss_curve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/loss_curve.png
--------------------------------------------------------------------------------
/results/lstm_predictions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/lstm_predictions.png
--------------------------------------------------------------------------------
/results/lstm_predictions_optimized.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/lstm_predictions_optimized.png
--------------------------------------------------------------------------------
/results/monthly_avg_price.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/monthly_avg_price.png
--------------------------------------------------------------------------------
/results/monthly_returns.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/monthly_returns.png
--------------------------------------------------------------------------------
/results/moving_averages.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/moving_averages.png
--------------------------------------------------------------------------------
/results/prophet_components.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/prophet_components.png
--------------------------------------------------------------------------------
/results/prophet_forecast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/prophet_forecast.png
--------------------------------------------------------------------------------
/results/seasonal_decomposition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/seasonal_decomposition.png
--------------------------------------------------------------------------------
/results/seasonal_trend_decomposition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/seasonal_trend_decomposition.png
--------------------------------------------------------------------------------
/results/simple_moving_average_forecast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/simple_moving_average_forecast.png
--------------------------------------------------------------------------------
/results/trend_change_points.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/trend_change_points.png
--------------------------------------------------------------------------------
/results/volatility_analysis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/volatility_analysis.png
--------------------------------------------------------------------------------
/results/volume_ma30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/volume_ma30.png
--------------------------------------------------------------------------------
/results/volume_over_time.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/volume_over_time.png
--------------------------------------------------------------------------------
/results/yearly_avg_price.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThecoderPinar/Samsung_Stock_Analysis_Forecasting_and_Volatility_Analysis/494dcd7e0177e2f223fde9e6cad6bf59c99571ea/results/yearly_avg_price.png
--------------------------------------------------------------------------------
/scripts/data_analysis.py:
--------------------------------------------------------------------------------
1 | import pandas as pd
2 | import matplotlib.pyplot as plt
3 | import seaborn as sns
4 | from statsmodels.tsa.statespace.sarimax import SARIMAX
5 | from statsmodels.tsa.seasonal import seasonal_decompose
6 | from scipy.stats import zscore
7 | from prophet import Prophet
8 | from ruptures import Binseg
9 |
10 | # Seaborn stil seçimi
11 | sns.set(style="whitegrid")
12 | sns.set_palette("muted")
13 |
14 | # Veri yükleme
15 | file_path = '../data/Samsung Dataset.csv'
16 | data = pd.read_csv(file_path)
17 |
18 | # Tarih sütununu datetime formatına dönüştürme
19 | data['Date'] = pd.to_datetime(data['Date'])
20 | data.set_index('Date', inplace=True)
21 |
22 | # Frekans bilgisi ekleme ve eksik değerleri doldurma
23 | data = data.asfreq('B')
24 | data = data.fillna(method='ffill')
25 |
26 | # 1. Eksik Değerlerin Tespiti
27 | missing_values = data.isnull().sum()
28 | print("Eksik Değerler:\n", missing_values)
29 |
30 | # 2. Temel İstatistiklerin Hesaplanması
31 | basic_statistics = data.describe()
32 | print("Temel İstatistikler:\n", basic_statistics)
33 |
34 | # 3. Korelasyon Matrisi
35 | correlation_matrix = data.corr()
36 | print("Korelasyon Matrisi:\n", correlation_matrix)
37 |
38 | # 4. Aykırı Değerlerin Tespiti (Z-Score ile)
39 | z_scores = zscore(data[['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume']])
40 | abs_z_scores = abs(z_scores)
41 | outliers = (abs_z_scores > 3).any(axis=1)
42 | data_outliers = data[outliers]
43 | print("Aykırı Değerler:\n", data_outliers)
44 |
45 | # 5. Zaman Serisi Grafikleri
46 | plt.figure(figsize=(14, 7))
47 | sns.lineplot(data=data, x=data.index, y='Close', label='Kapanış Fiyatı', color='gold')
48 | sns.lineplot(data=data, x=data.index, y='Adj Close', label='Düzeltilmiş Kapanış Fiyatı', color='orange')
49 | plt.xlabel('Tarih')
50 | plt.ylabel('Fiyat')
51 | plt.title('Zaman İçinde Kapanış ve Düzeltilmiş Kapanış Fiyatı')
52 | plt.legend()
53 | plt.grid(True)
54 | plt.savefig('../results/close_adj_close.png')
55 | plt.show()
56 |
57 | # 6. Hareketli Ortalamalar (20 ve 100 Günlük)
58 | data['MA20'] = data['Close'].rolling(window=20).mean()
59 | data['MA100'] = data['Close'].rolling(window=100).mean()
60 |
61 | plt.figure(figsize=(14, 7))
62 | sns.lineplot(data=data, x=data.index, y='Close', label='Kapanış Fiyatı', color='gold')
63 | sns.lineplot(data=data, x=data.index, y='MA20', label='20 Günlük Hareketli Ortalama', color='orange')
64 | sns.lineplot(data=data, x=data.index, y='MA100', label='100 Günlük Hareketli Ortalama', color='red')
65 | plt.xlabel('Tarih')
66 | plt.ylabel('Fiyat')
67 | plt.title('20 ve 100 Günlük Hareketli Ortalamalar ile Kapanış Fiyatı')
68 | plt.legend()
69 | plt.grid(True)
70 | plt.savefig('../results/moving_averages.png')
71 | plt.show()
72 |
73 | # 7. Veriyi Son 2 Yıl ile Sınırlandırma
74 | data_last_2_years = data[data.index >= '2022-01-01']
75 |
76 | # 8. SARIMA Modeli Kurma ve Tahmin (Son 2 Yıl İçin)
77 | model_last_2_years = SARIMAX(data_last_2_years['Close'], order=(1, 1, 1), seasonal_order=(1, 1, 0, 12))
78 | model_fit_last_2_years = model_last_2_years.fit(disp=False)
79 |
80 | forecast_last_2_years = model_fit_last_2_years.get_forecast(steps=30)
81 | forecast_index_last_2_years = pd.date_range(start=data_last_2_years.index[-1], periods=30, freq='B')
82 | forecast_series_last_2_years = pd.Series(forecast_last_2_years.predicted_mean, index=forecast_index_last_2_years)
83 |
84 | # 9. Basit Hareketli Ortalama ile Tahmin
85 | last_30_days_mean = data_last_2_years['Close'].iloc[-30:].mean()
86 | forecast_simple_moving_average = [last_30_days_mean] * 30
87 | forecast_index_simple_moving_average = pd.date_range(start=data_last_2_years.index[-1], periods=30, freq='B')
88 | forecast_series_simple_moving_average = pd.Series(forecast_simple_moving_average, index=forecast_index_simple_moving_average)
89 |
90 | # Tahmin verilerini DataFrame'e dönüştürme
91 | forecast_df = pd.DataFrame({
92 | 'Date': forecast_series_simple_moving_average.index,
93 | 'Forecast': forecast_series_simple_moving_average.values
94 | })
95 |
96 | plt.figure(figsize=(14, 7))
97 | sns.lineplot(data=data_last_2_years, x=data_last_2_years.index, y='Close', label='Kapanış Fiyatı (Son 2 Yıl)', color='gold')
98 | sns.lineplot(data=forecast_df, x='Date', y='Forecast', label='Tahmin (Basit Hareketli Ortalama)', linestyle='--', color='red')
99 | plt.xlabel('Tarih')
100 | plt.ylabel('Fiyat')
101 | plt.title('Kapanış Fiyatı ve Basit Hareketli Ortalama Tahmini')
102 | plt.legend()
103 | plt.grid(True)
104 | plt.savefig('../results/simple_moving_average_forecast.png')
105 | plt.show()
106 |
107 | # 10. Mevsimsellik ve Trend Analizi
108 | decomposition = seasonal_decompose(data['Close'], model='multiplicative', period=365)
109 | fig = decomposition.plot()
110 | fig.set_size_inches(14, 7)
111 | plt.savefig('../results/seasonal_decomposition.png')
112 | plt.show()
113 |
114 | # 11. Günlük ve Aylık Getiri Hesaplamaları
115 | data['Daily_Return'] = data['Close'].pct_change()
116 | data['Monthly_Return'] = data['Close'].resample('ME').ffill().pct_change()
117 |
118 | plt.figure(figsize=(14, 7))
119 | sns.lineplot(data=data, x=data.index, y='Daily_Return', label='Günlük Getiri', color='gold')
120 | plt.xlabel('Tarih')
121 | plt.ylabel('Günlük Getiri')
122 | plt.title('Zaman İçinde Günlük Getiriler')
123 | plt.legend()
124 | plt.grid(True)
125 | plt.savefig('../results/daily_returns.png')
126 | plt.show()
127 |
128 | plt.figure(figsize=(14, 7))
129 | data_monthly = data.resample('ME').last()
130 | sns.lineplot(data=data_monthly, x=data_monthly.index, y='Monthly_Return', label='Aylık Getiri', color='gold')
131 | plt.xlabel('Tarih')
132 | plt.ylabel('Aylık Getiri')
133 | plt.title('Zaman İçinde Aylık Getiriler')
134 | plt.legend()
135 | plt.grid(True)
136 | plt.savefig('../results/monthly_returns.png')
137 | plt.show()
138 |
139 | # 12. Volatilite Analizi
140 | data['Volatility'] = data['Daily_Return'].rolling(window=30).std()
141 |
142 | plt.figure(figsize=(14, 7))
143 | sns.lineplot(data=data, x=data.index, y='Volatility', label='30 Günlük Volatilite', color='gold')
144 | plt.xlabel('Tarih')
145 | plt.ylabel('Volatilite')
146 | plt.title('Zaman İçinde 30 Günlük Volatilite')
147 | plt.legend()
148 | plt.grid(True)
149 | plt.savefig('../results/volatility_analysis.png')
150 | plt.show()
151 |
152 | # 13. Aylık Ortalama Fiyat Analizi
153 | data['Monthly_Avg'] = data['Close'].resample('ME').mean()
154 |
155 | plt.figure(figsize=(14, 7))
156 | sns.lineplot(data=data, x=data.index, y='Monthly_Avg', label='Aylık Ortalama Fiyat', color='gold')
157 | plt.xlabel('Tarih')
158 | plt.ylabel('Ortalama Fiyat')
159 | plt.title('Zaman İçinde Aylık Ortalama Fiyat')
160 | plt.legend()
161 | plt.grid(True)
162 | plt.savefig('../results/monthly_avg_price.png')
163 | plt.show()
164 |
165 | # 14. Yıllık Ortalama Fiyat Analizi
166 | data['Yearly_Avg'] = data['Close'].resample('YE').mean()
167 |
168 | plt.figure(figsize=(14, 7))
169 | sns.lineplot(data=data, x=data.index, y='Yearly_Avg', label='Yıllık Ortalama Fiyat', color='gold')
170 | plt.xlabel('Tarih')
171 | plt.ylabel('Ortalama Fiyat')
172 | plt.title('Zaman İçinde Yıllık Ortalama Fiyat')
173 | plt.legend()
174 | plt.grid(True)
175 | plt.savefig('../results/yearly_avg_price.png')
176 | plt.show()
177 |
178 | # 15. İleri Düzey Tahmin: Prophet Kütüphanesi ile
179 | # Model için tarih ve kapanış fiyatı sütunlarını Prophet formatına getirme
180 | prophet_data = data[['Close']].reset_index()
181 | prophet_data.columns = ['ds', 'y']
182 |
183 | # Prophet modelini kurma ve tahmin
184 | prophet_model = Prophet()
185 | prophet_model.fit(prophet_data)
186 |
187 | # Geleceğe yönelik tahminler oluşturma
188 | future = prophet_model.make_future_dataframe(periods=365)
189 | forecast = prophet_model.predict(future)
190 |
191 | # Tahmin sonuçlarını görselleştirme
192 | plt.figure(figsize=(14, 7))
193 | prophet_model.plot(forecast)
194 | plt.title('Prophet ile Tahmin')
195 | plt.xlabel('Tarih')
196 | plt.ylabel('Fiyat')
197 | plt.savefig('../results/prophet_forecast.png')
198 | plt.show()
199 |
200 | # Prophet bileşen grafiği
201 | plt.figure(figsize=(14, 7))
202 | prophet_model.plot_components(forecast)
203 | plt.title('Prophet Bileşen Grafiği')
204 | plt.savefig('../results/prophet_components.png')
205 | plt.show()
206 |
207 | # 16. Trend Değişimi Analizi (Change Point Detection)
208 | # Kapanış fiyatları üzerinde trend değişim noktalarını bulma
209 | signal = data['Close'].values
210 | algo = Binseg(model="l2").fit(signal)
211 | result = algo.predict(n_bkps=10)
212 |
213 | # Trend değişimlerini görselleştirme
214 | plt.figure(figsize=(14, 7))
215 | plt.plot(data.index, data['Close'], label='Kapanış Fiyatı', color='gold')
216 | for bkpt in result[:-1]: # Son nokta dışındaki değişim noktaları
217 | plt.axvline(x=data.index[bkpt], color='red', linestyle='--')
218 | plt.xlabel('Tarih')
219 | plt.ylabel('Fiyat')
220 | plt.title('Trend Değişim Noktaları')
221 | plt.legend()
222 | plt.grid(True)
223 | plt.savefig('../results/trend_change_points.png')
224 | plt.show()
225 |
226 | # 17. Hisse Senedi Fiyatlarının KDE (Kernel Density Estimation) Analizi
227 | plt.figure(figsize=(14, 7))
228 | sns.kdeplot(data=data['Close'], fill=True, color='gold') # fill parametresi shade yerine kullanıldı
229 | plt.xlabel('Fiyat')
230 | plt.ylabel('Yoğunluk')
231 | plt.title('Kapanış Fiyatlarının KDE Analizi')
232 | plt.grid(True)
233 | plt.savefig('../results/kde_analysis.png')
234 | plt.show()
235 |
236 | # 18. Hacim Verilerinin Zaman İçindeki Değişimi
237 | plt.figure(figsize=(14, 7))
238 | sns.lineplot(data=data, x=data.index, y='Volume', label='Hacim', color='gold')
239 | plt.xlabel('Tarih')
240 | plt.ylabel('Hacim')
241 | plt.title('Hacim Verilerinin Zaman İçindeki Değişimi')
242 | plt.legend()
243 | plt.grid(True)
244 | plt.savefig('../results/volume_over_time.png')
245 | plt.show()
246 |
247 | # 19. Hisse Senedi Fiyatları Arasındaki Korelasyon Matrisi
248 | plt.figure(figsize=(14, 7))
249 | sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', linewidths=0.5)
250 | plt.title('Hisse Senedi Fiyatları Arasındaki Korelasyon Matrisi')
251 | plt.savefig('../results/correlation_matrix.png')
252 | plt.show()
253 |
254 | # Sonuçlar
255 | print("Temel İstatistikler:\n", basic_statistics)
256 | print("Korelasyon Matrisi:\n", correlation_matrix)
257 | print("Basit Hareketli Ortalama Tahminleri:\n", forecast_series_simple_moving_average.head())
258 |
--------------------------------------------------------------------------------
/scripts/lstm_forecasting.py:
--------------------------------------------------------------------------------
1 | import pandas as pd
2 | import numpy as np
3 | import matplotlib.pyplot as plt
4 | from sklearn.preprocessing import MinMaxScaler
5 | from tensorflow.keras.models import Sequential
6 | from tensorflow.keras.layers import Dense, LSTM
7 | import math
8 | from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
9 |
10 | # Veri yükleme
11 | file_path = '../data/Samsung Dataset.csv'
12 | data = pd.read_csv(file_path)
13 |
14 | # Tarih sütununu datetime formatına dönüştürme
15 | data['Date'] = pd.to_datetime(data['Date'])
16 | data.set_index('Date', inplace=True)
17 |
18 | # Kapanış fiyatını seçme
19 | closing_price = data['Close'].values.reshape(-1, 1)
20 |
21 | # Verileri ölçeklendirme
22 | scaler = MinMaxScaler(feature_range=(0, 1))
23 | scaled_data = scaler.fit_transform(closing_price)
24 |
25 | # Eğitim ve test verilerini ayırma
26 | train_size = int(len(scaled_data) * 0.8)
27 | test_size = len(scaled_data) - train_size
28 | train_data, test_data = scaled_data[0:train_size, :], scaled_data[train_size:len(scaled_data), :]
29 |
30 | def create_dataset(dataset, time_step=1):
31 | dataX, dataY = [], []
32 | for i in range(len(dataset) - time_step - 1):
33 | a = dataset[i:(i + time_step), 0]
34 | dataX.append(a)
35 | dataY.append(dataset[i + time_step, 0])
36 | return np.array(dataX), np.array(dataY)
37 |
38 | # Zaman adımı
39 | time_step = 100
40 |
41 | # Eğitim ve test verisetleri oluşturma
42 | X_train, y_train = create_dataset(train_data, time_step)
43 | X_test, y_test = create_dataset(test_data, time_step)
44 |
45 | # Verileri LSTM girişine uygun hale getirme
46 | X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
47 | X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
48 |
49 | # LSTM modeli oluşturma
50 | model = Sequential()
51 | model.add(LSTM(50, return_sequences=True, input_shape=(time_step, 1)))
52 | model.add(LSTM(50, return_sequences=False))
53 | model.add(Dense(25))
54 | model.add(Dense(1))
55 |
56 | # Modeli derleme
57 | model.compile(optimizer='adam', loss='mean_squared_error')
58 |
59 | # Modeli eğitme
60 | model.fit(X_train, y_train, validation_data=(X_test, y_test), batch_size=32, epochs=5)
61 |
62 | # Tahminleri yapma
63 | train_predict = model.predict(X_train)
64 | test_predict = model.predict(X_test)
65 |
66 | # Verileri ters ölçeklendirme
67 | train_predict = scaler.inverse_transform(train_predict)
68 | test_predict = scaler.inverse_transform(test_predict)
69 | y_train = scaler.inverse_transform(y_train.reshape(-1, 1))
70 | y_test = scaler.inverse_transform(y_test.reshape(-1, 1))
71 |
72 | # RMSE hesaplama
73 | train_rmse = math.sqrt(mean_squared_error(y_train, train_predict))
74 | test_rmse = math.sqrt(mean_squared_error(y_test, test_predict))
75 |
76 | # MAE hesaplama
77 | train_mae = mean_absolute_error(y_train, train_predict)
78 | test_mae = mean_absolute_error(y_test, test_predict)
79 |
80 | # MAPE hesaplama
81 | epsilon = 1e-10
82 | train_mape = np.mean(np.abs((y_train - train_predict) / (y_train + epsilon))) * 100
83 | test_mape = np.mean(np.abs((y_test - test_predict) / (y_test + epsilon))) * 100
84 |
85 | # R² hesaplama
86 | train_r2 = r2_score(y_train, train_predict)
87 | test_r2 = r2_score(y_test, test_predict)
88 |
89 | # Doğruluk (Accuracy) hesaplama
90 | train_accuracy = np.mean(np.sign(y_train[1:] - y_train[:-1]) == np.sign(train_predict[1:] - train_predict[:-1]))
91 | test_accuracy = np.mean(np.sign(y_test[1:] - y_test[:-1]) == np.sign(test_predict[1:] - test_predict[:-1]))
92 |
93 | print(f'Train RMSE: {train_rmse}')
94 | print(f'Test RMSE: {test_rmse}')
95 | print(f'Train MAE: {train_mae}')
96 | print(f'Test MAE: {test_mae}')
97 | print(f'Train MAPE: {train_mape}')
98 | print(f'Test MAPE: {test_mape}')
99 | print(f'Train R²: {train_r2}')
100 | print(f'Test R²: {test_r2}')
101 | print(f'Train Accuracy: {train_accuracy}')
102 | print(f'Test Accuracy: {test_accuracy}')
103 |
104 | # Tahmin sonuçlarını görselleştirme
105 | train_predict_plot = np.empty_like(scaled_data)
106 | train_predict_plot[:, :] = np.nan
107 | train_predict_plot[time_step:len(train_predict) + time_step, :] = train_predict
108 |
109 | test_predict_plot = np.empty_like(scaled_data)
110 | test_predict_plot[:, :] = np.nan
111 | test_predict_plot[len(train_predict) + (time_step * 2) + 1:len(scaled_data) - 1, :] = test_predict
112 |
113 | plt.figure(figsize=(14, 7))
114 | plt.plot(scaler.inverse_transform(scaled_data), label='Gerçek Fiyat')
115 | plt.plot(train_predict_plot, label='Eğitim Tahmini')
116 | plt.plot(test_predict_plot, label='Test Tahmini')
117 | plt.xlabel('Tarih')
118 | plt.ylabel('Fiyat')
119 | plt.title('Gerçek ve Tahmin Edilen Hisse Fiyatları')
120 | plt.legend()
121 | plt.grid(True)
122 | plt.savefig('../results/lstm_predictions.png')
123 | plt.show()
124 |
125 | # Gelecek 30 gün için tahmin yapma
126 | x_input = test_data[len(test_data) - time_step:].reshape(1, -1)
127 | temp_input = list(x_input)
128 | temp_input = temp_input[0].tolist()
129 |
130 | lst_output = []
131 | n_steps = time_step
132 | i = 0
133 | while (i < 30):
134 | if (len(temp_input) > time_step):
135 | x_input = np.array(temp_input[1:])
136 | x_input = x_input.reshape(1, -1)
137 | x_input = x_input.reshape((1, n_steps, 1))
138 | yhat = model.predict(x_input, verbose=0)
139 | temp_input.extend(yhat[0].tolist())
140 | temp_input = temp_input[1:]
141 | lst_output.extend(yhat.tolist())
142 | i = i + 1
143 | else:
144 | x_input = x_input.reshape((1, n_steps, 1))
145 | yhat = model.predict(x_input, verbose=0)
146 | temp_input.extend(yhat[0].tolist())
147 | lst_output.extend(yhat.tolist())
148 | i = i + 1
149 |
150 | # Gelecek 30 günün tahmin edilen fiyatları
151 | future_predictions = scaler.inverse_transform(lst_output)
152 | print(f'Gelecek 30 günün tahmin edilen fiyatları:\n {future_predictions}')
153 |
154 | # Gelecek tahminleri görselleştirme
155 | last_date = data.index[-1]
156 | future_dates = pd.date_range(last_date, periods=31, freq='B')[1:]
157 |
158 | plt.figure(figsize=(14, 7))
159 | plt.plot(data.index, scaler.inverse_transform(scaled_data), label='Gerçek Fiyat')
160 | plt.plot(future_dates, future_predictions, label='Tahmin Edilen Gelecek Fiyat', linestyle='--')
161 | plt.xlabel('Tarih')
162 | plt.ylabel('Fiyat')
163 | plt.title('Gelecek 30 Günün Tahmin Edilen Fiyatları')
164 | plt.legend()
165 | plt.grid(True)
166 | plt.savefig('../results/future_predictions.png')
167 | plt.show()
168 |
169 | # Modelin performansı ile ilgili ek analizler
170 | plt.figure(figsize=(14, 7))
171 | plt.hist((y_test.flatten() - test_predict.flatten()), bins=50, color='gold', edgecolor='black')
172 | plt.title('Hata Dağılımı (Test Verisi)')
173 | plt.xlabel('Hata (Gerçek - Tahmin)')
174 | plt.ylabel('Frekans')
175 | plt.grid(True)
176 | plt.savefig('../results/error_distribution.png')
177 | plt.show()
178 |
179 | # Trend analizleri
180 | plt.figure(figsize=(14, 7))
181 | plt.plot(future_dates, future_predictions, label='Tahmin Edilen Gelecek Fiyat', color='red')
182 | plt.axhline(y=np.mean(future_predictions), color='blue', linestyle='--', label='Ortalama Tahmin')
183 | plt.xlabel('Tarih')
184 | plt.ylabel('Fiyat')
185 | plt.title('Gelecek 30 Günün Trend Analizi')
186 | plt.legend()
187 | plt.grid(True)
188 | plt.savefig('../results/future_trend_analysis.png')
189 | plt.show()
190 |
--------------------------------------------------------------------------------
/scripts/samsung_stock_volume_forecast.py:
--------------------------------------------------------------------------------
1 | import pandas as pd
2 | import matplotlib.pyplot as plt
3 | import seaborn as sns
4 | from statsmodels.tsa.statespace.sarimax import SARIMAX
5 | from statsmodels.tsa.seasonal import seasonal_decompose
6 | from sklearn.linear_model import LinearRegression
7 | import numpy as np
8 |
9 | # Seaborn stil seçimi
10 | sns.set(style="whitegrid")
11 | sns.set_palette("muted")
12 |
13 | # Veri yükleme
14 | file_path = '../data/Samsung Dataset.csv'
15 | data = pd.read_csv(file_path)
16 |
17 | # Tarih sütununu datetime formatına dönüştürme
18 | data['Date'] = pd.to_datetime(data['Date'])
19 | data.set_index('Date', inplace=True)
20 |
21 | # 1. Veri Yükleme ve Hazırlık
22 | data = data.asfreq('B') # İş günlerine göre frekans ayarlama
23 | data['Volume'] = data['Volume'].ffill() # Hacim verilerindeki eksik değerleri ileri doldurma
24 |
25 | # 2. Tarihsel Eğilimlerin Belirlenmesi
26 | data['Volume_MA30'] = data['Volume'].rolling(window=30).mean()
27 |
28 | plt.figure(figsize=(14, 7))
29 | sns.lineplot(data=data, x=data.index, y='Volume', label='Hacim', color='blue')
30 | sns.lineplot(data=data, x=data.index, y='Volume_MA30', label='30 Günlük Hareketli Ortalama', color='orange')
31 | plt.xlabel('Tarih')
32 | plt.ylabel('Hacim')
33 | plt.title('Hacim ve 30 Günlük Hareketli Ortalama')
34 | plt.legend()
35 | plt.savefig('./volume_ma30.png')
36 | plt.show()
37 |
38 | # 3. Hacim Tahminleri (2024-2031)
39 |
40 | # Lineer Regresyon ile Tahmin
41 | data['Year'] = data.index.year
42 | yearly_volume = data.groupby('Year')['Volume'].sum().reset_index()
43 |
44 | X = yearly_volume[['Year']]
45 | y = yearly_volume['Volume']
46 |
47 | model = LinearRegression()
48 | model.fit(X, y)
49 |
50 | # 2024-2031 yılları için tahmin yapma
51 | future_years = pd.DataFrame({'Year': np.arange(2024, 2032)})
52 | future_volumes = model.predict(future_years)
53 |
54 | # Sonuçları görselleştirme
55 | plt.figure(figsize=(14, 7))
56 | sns.lineplot(data=yearly_volume, x='Year', y='Volume', label='Gerçek Hacim', color='blue')
57 | sns.lineplot(data=future_years, x='Year', y=future_volumes, label='Tahmin Edilen Hacim', linestyle='--', color='red')
58 | plt.xlabel('Yıl')
59 | plt.ylabel('Toplam Hacim')
60 | plt.title('2024-2031 Yılları Arası Tahmin Edilen Toplam Hacim')
61 | plt.legend()
62 | plt.savefig('./linear_regression_forecast.png')
63 | plt.show()
64 |
65 | # Tahmin sonuçları
66 | future_years['Tahmin Edilen Hacim'] = future_volumes
67 | print(future_years)
68 |
69 | # 4. ARIMA Modeli ile Hacim Tahmini
70 | # ARIMA modeli kurma ve tahmin (son 2 yıl için)
71 | model_arima = SARIMAX(data['Volume'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
72 | model_fit_arima = model_arima.fit(disp=False)
73 |
74 | # 2024-2031 yılları için tahmin yapma
75 | forecast_arima = model_fit_arima.get_forecast(steps=8*12)
76 | forecast_index_arima = pd.date_range(start=data.index[-1], periods=8*12, freq='ME')
77 | forecast_series_arima = pd.Series(forecast_arima.predicted_mean, index=forecast_index_arima)
78 | forecast_arima_df = forecast_series_arima.reset_index()
79 | forecast_arima_df.columns = ['Date', 'Forecast']
80 |
81 | # Sonuçları görselleştirme
82 | plt.figure(figsize=(14, 7))
83 | sns.lineplot(data=data, x=data.index, y='Volume', label='Gerçek Hacim', color='blue')
84 | sns.lineplot(data=forecast_arima_df, x='Date', y='Forecast', label='ARIMA Tahmini', linestyle='--', color='red')
85 | plt.xlabel('Tarih')
86 | plt.ylabel('Toplam Hacim')
87 | plt.title('2024-2031 Yılları Arası ARIMA ile Tahmin Edilen Toplam Hacim')
88 | plt.legend()
89 | plt.savefig('./arima_forecast.png')
90 | plt.show()
91 |
92 | # 5. Mevsimsellik ve Trend Analizi
93 | # Additif model kullanarak mevsimsel decompose işlemi
94 | decomposition = seasonal_decompose(data['Volume'], model='additive', period=365)
95 | fig = decomposition.plot()
96 | fig.set_size_inches(14, 7)
97 | plt.savefig('./seasonal_trend_decomposition.png')
98 | plt.show()
99 |
100 | # 6. Günlük ve Aylık Getiri Hesaplamaları
101 | data['Daily_Return'] = data['Volume'].pct_change()
102 | data['Monthly_Return'] = data['Volume'].resample('ME').ffill().pct_change()
103 |
104 | plt.figure(figsize=(14, 7))
105 | sns.lineplot(data=data, x=data.index, y='Daily_Return', label='Günlük Getiri', color='blue')
106 | plt.xlabel('Tarih')
107 | plt.ylabel('Günlük Getiri')
108 | plt.title('Zaman İçinde Günlük Getiriler')
109 | plt.legend()
110 | plt.savefig('./daily_returns.png')
111 | plt.show()
112 |
113 | plt.figure(figsize=(14, 7))
114 | data_monthly = data.resample('ME').last()
115 | sns.lineplot(data=data_monthly, x=data_monthly.index, y='Monthly_Return', label='Aylık Getiri', color='blue')
116 | plt.xlabel('Tarih')
117 | plt.ylabel('Aylık Getiri')
118 | plt.title('Zaman İçinde Aylık Getiriler')
119 | plt.legend()
120 | plt.savefig('./monthly_returns.png')
121 | plt.show()
122 |
123 | # 7. Volatilite Analizi
124 | data['Volatility'] = data['Daily_Return'].rolling(window=30).std()
125 |
126 | plt.figure(figsize=(14, 7))
127 | sns.lineplot(data=data, x=data.index, y='Volatility', label='30 Günlük Volatilite', color='blue')
128 | plt.xlabel('Tarih')
129 | plt.ylabel('Volatilite')
130 | plt.title('Zaman İçinde 30 Günlük Volatilite')
131 | plt.legend()
132 | plt.savefig('./volatility_analysis.png')
133 | plt.show()
134 |
--------------------------------------------------------------------------------