|
447 | 447 | <div class="author-profile ms-auto align-self-lg-center">
|
448 | 448 | <img class="rounded-circle" src='/images/author/profile_hu8a567cefac8c1a165d433ac0796ac418_3088978_120x120_fit_q75_box.jpg' alt="Author Image">
|
449 | 449 | <h5 class="author-name">Stefano Giannini</h5>
|
450 |
| - <p class="text-muted">Friday, June 28, 2024 | 9 minutes</p> |
| 450 | + <p class="text-muted">Friday, June 28, 2024 | 8 minutes</p> |
451 | 451 | </div>
|
452 | 452 |
|
453 | 453 |
|
@@ -648,27 +648,7 @@ <h3 id="finding-q-parameter-from-plots">Finding q parameter from plots</h3>
|
648 | 648 | </span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>show()
|
649 | 649 | </span></span></code></pre></div><p><img alt="png" src="/posts/finance/stock_prediction/arima/images/find_q.png"></p>
|
650 | 650 | <p>ACF looks very similar to PCF for smaller lags. Hence, even in this case a value of 8 can be used as <em>q</em>.</p>
|
651 |
| -<h3 id="grid-search">Grid Search</h3> |
652 |
| -<p>Here’s a Python function to perform a grid search:</p> |
653 |
| -<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">grid_search_arima</span>(ts, p_range, d_range, q_range): |
654 |
| -</span></span><span style="display:flex;"><span> best_aic <span style="color:#f92672">=</span> float(<span style="color:#e6db74">'inf'</span>) |
655 |
| -</span></span><span style="display:flex;"><span> best_order <span style="color:#f92672">=</span> <span style="color:#66d9ef">None</span> |
656 |
| -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> p <span style="color:#f92672">in</span> p_range: |
657 |
| -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> d <span style="color:#f92672">in</span> d_range: |
658 |
| -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> q <span style="color:#f92672">in</span> q_range: |
659 |
| -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">try</span>: |
660 |
| -</span></span><span style="display:flex;"><span> model <span style="color:#f92672">=</span> ARIMA(ts, order<span style="color:#f92672">=</span>(p, d, q)) |
661 |
| -</span></span><span style="display:flex;"><span> results <span style="color:#f92672">=</span> model<span style="color:#f92672">.</span>fit() |
662 |
| -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> results<span style="color:#f92672">.</span>aic <span style="color:#f92672"><</span> best_aic: |
663 |
| -</span></span><span style="display:flex;"><span> best_aic <span style="color:#f92672">=</span> results<span style="color:#f92672">.</span>aic |
664 |
| -</span></span><span style="display:flex;"><span> best_order <span style="color:#f92672">=</span> (p, d, q) |
665 |
| -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span>: |
666 |
| -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> |
667 |
| -</span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">'Best ARIMA order: </span><span style="color:#e6db74">{</span>best_order<span style="color:#e6db74">}</span><span style="color:#e6db74">'</span>) |
668 |
| -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> best_order |
669 |
| -</span></span><span style="display:flex;"><span> |
670 |
| -</span></span><span style="display:flex;"><span>best_order <span style="color:#f92672">=</span> grid_search_arima(ts_diff, range(<span style="color:#ae81ff">3</span>), range(<span style="color:#ae81ff">2</span>), range(<span style="color:#ae81ff">3</span>)) |
671 |
| -</span></span></code></pre></div><h2 id="6-arima-model-fitting">6. ARIMA model fitting</h2> |
| 651 | +<h2 id="6-arima-model-fitting">6. ARIMA model fitting</h2> |
672 | 652 | <h3 id="predict-arima-model-on-all-data">Predict ARIMA model on all data</h3>
|
673 | 653 | <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>model <span style="color:#f92672">=</span> ARIMA(df<span style="color:#f92672">.</span>Close, order<span style="color:#f92672">=</span>(<span style="color:#ae81ff">8</span>,<span style="color:#ae81ff">2</span>,<span style="color:#ae81ff">8</span>)) <span style="color:#75715e"># p,d,q</span>
|
674 | 654 | </span></span><span style="display:flex;"><span>results <span style="color:#f92672">=</span> model<span style="color:#f92672">.</span>fit()
|
@@ -744,7 +724,7 @@ <h3 id="train-test-split">Train/ Test split</h3>
|
744 | 724 | <p>‘corr’: 0.4484875181364141,</p>
|
745 | 725 | <p>‘minmax’: 0.07810488835602647}</p>
|
746 | 726 | </blockquote>
|
747 |
| -<h3 id="grid-search-1">Grid Search</h3> |
| 727 | +<h3 id="grid-search">Grid Search</h3> |
748 | 728 | <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">grid_search_arima</span>(train, test, p_range, d_range, q_range):
|
749 | 729 | </span></span><span style="display:flex;"><span> best_aic <span style="color:#f92672">=</span> float(<span style="color:#e6db74">'inf'</span>)
|
750 | 730 | </span></span><span style="display:flex;"><span> best_mape <span style="color:#f92672">=</span> float(<span style="color:#e6db74">'inf'</span>)
|
@@ -784,6 +764,7 @@ <h3 id="grid-search-1">Grid Search</h3>
|
784 | 764 | <p>temp best: (3, 2, 4) 0.07647187068962996</p>
|
785 | 765 | <p>Best ARIMA order based on grid search: (3, 2, 4)</p>
|
786 | 766 | </blockquote>
|
| 767 | +<p>In g</p> |
787 | 768 | <h2 id="7-limitations-and-considerations">7. Limitations and Considerations</h2>
|
788 | 769 | <p>While ARIMA models can be powerful for time series prediction, they have limitations:</p>
|
789 | 770 | <ol>
|
@@ -982,14 +963,13 @@ <h5 class="text-center ps-3">Table of Contents</h5>
|
982 | 963 | <li><a href="#finding-d-parameter-from-plots">Finding d parameter from plots</a></li>
|
983 | 964 | <li><a href="#finding-p-parameter-from-plots">Finding p parameter from plots</a></li>
|
984 | 965 | <li><a href="#finding-q-parameter-from-plots">Finding q parameter from plots</a></li>
|
985 |
| - <li><a href="#grid-search">Grid Search</a></li> |
986 | 966 | </ul>
|
987 | 967 | </li>
|
988 | 968 | <li><a href="#6-arima-model-fitting">6. ARIMA model fitting</a>
|
989 | 969 | <ul>
|
990 | 970 | <li><a href="#predict-arima-model-on-all-data">Predict ARIMA model on all data</a></li>
|
991 | 971 | <li><a href="#train-test-split">Train/ Test split</a></li>
|
992 |
| - <li><a href="#grid-search-1">Grid Search</a></li> |
| 972 | + <li><a href="#grid-search">Grid Search</a></li> |
993 | 973 | </ul>
|
994 | 974 | </li>
|
995 | 975 | <li><a href="#7-limitations-and-considerations">7. Limitations and Considerations</a></li>
|
|
0 commit comments