├── .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 | 7 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 52 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | ![Hacim ve 30 Günlük Hareketli Ortalama](./results/volume_ma30.png) 120 | 121 | ### 📈 2024-2031 Yılları Arası Tahmin Edilen Toplam Hacim (Lineer Regresyon) 122 | ![2024-2031 Yılları Arası Tahmin Edilen Toplam Hacim (Lineer Regresyon)](./results/linear_regression_forecast.png) 123 | 124 | ### 📉 2024-2031 Yılları Arası Tahmin Edilen Toplam Hacim (ARIMA) 125 | ![2024-2031 Yılları Arası Tahmin Edilen Toplam Hacim (ARIMA)](./results/arima_forecast.png) 126 | 127 | ### 🌦️ Mevsimsellik ve Trend Analizi 128 | ![Mevsimsellik ve Trend Analizi](./results/seasonal_trend_decomposition.png) 129 | 130 | ### 📆 Günlük Getiriler 131 | ![Günlük Getiriler](./results/daily_returns.png) 132 | 133 | ### 📅 Aylık Getiriler 134 | ![Aylık Getiriler](./results/monthly_returns.png) 135 | 136 | ### ⚡ Volatilite Analizi 137 | ![Volatilite Analizi](./results/volatility_analysis.png) 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 | ![Kapanış ve Düzeltilmiş Kapanış Fiyatı](../results/close_adj_close.png) 18 | 2. **📉 Hareketli Ortalamalar**: 20 günlük ve 100 günlük hareketli ortalamalar hesaplanmış ve çizilmiştir. 19 | ![Hareketli Ortalamalar](../results/moving_averages.png) 20 | 3. **🌀 Mevsimsel Ayrıştırma**: Veriler trend, mevsimsel ve artık bileşenlere ayrıştırılmıştır. 21 | ![Mevsimsel Ayrıştırma](../results/seasonal_decomposition.png) 22 | 4. **📅 Getiriler**: Günlük ve aylık getiriler hesaplanmış ve görselleştirilmiştir. 23 | ![Günlük Getiriler](../results/daily_returns.png) 24 | ![Aylık Getiriler](../results/monthly_returns.png) 25 | 5. **📉 Volatilite**: 30 günlük hareketli volatilite hesaplanmış ve çizilmiştir. 26 | ![Volatilite Analizi](../results/volatility_analysis.png) 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 | ![SARIMA Tahmini](../results/simple_moving_average_forecast.png) 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 | ![Prophet Tahmini](../results/prophet_forecast.png) 37 | ![Prophet Bileşen Grafiği](../results/prophet_components.png) 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 | ![Trend Değişim Noktaları](../results/trend_change_points.png) 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 | ![KDE Analizi](../results/kde_analysis.png) 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 | ![Hacim Analizi](../results/volume_over_time.png) 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 | ![Korelasyon Matrisi](../results/correlation_matrix.png) 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 | ![Gerçek ve Tahmin Edilen Hisse Fiyatları](../results/lstm_predictions.png) 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 | ![Gelecek 30 Gün Tahminleri](../results/future_predictions.png) 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 | ![Eğitim ve Test Hataları](../results/train_test_errors.png) 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 | ![Hata Dağılımı](../results/error_distribution.png) 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 | ![Hacim ve 30 Günlük Hareketli Ortalama](../results/volume_ma30.png) 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 | ![Lineer Regresyon Modeli ile Tahmin Edilen Hacim](../results/linear_regression_forecast.png) 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 | ![ARIMA Modeli ile Tahmin Edilen Hacim](../results/arima_forecast.png) 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 | ![Mevsimsellik ve Trend Analizi](../results/seasonal_trend_decomposition.png) 128 | 129 | Bu grafik, hisse senedi hacmindeki mevsimsellik ve trendleri göstermektedir. 130 | 131 | --- 132 | 133 | ### Günlük Getiriler 134 | ![Günlük Getiriler](../results/daily_returns.png) 135 | 136 | Bu grafik, hisse senedi hacmindeki günlük getirileri göstermektedir. 137 | 138 | --- 139 | 140 | ### Aylık Getiriler 141 | ![Aylık Getiriler](../results/monthly_returns.png) 142 | 143 | Bu grafik, hisse senedi hacmindeki aylık getirileri göstermektedir. 144 | 145 | --- 146 | 147 | ### 30 Günlük Volatilite 148 | ![30 Günlük Volatilite](../results/volatility_analysis.png) 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 | --------------------------------------------------------------------------------