Skip to content

Commit ae3e449

Browse files
add tsmoothie
1 parent 33061e0 commit ae3e449

File tree

8 files changed

+27959
-60
lines changed

8 files changed

+27959
-60
lines changed

Chapter5/spark.ipynb

Lines changed: 9184 additions & 20 deletions
Large diffs are not rendered by default.

Chapter5/time_series.ipynb

Lines changed: 164 additions & 0 deletions
Large diffs are not rendered by default.

docs/Chapter5/spark.html

Lines changed: 9179 additions & 19 deletions
Large diffs are not rendered by default.

docs/Chapter5/time_series.html

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,7 @@ <h2> Contents </h2>
532532
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#beyond-point-estimates-leverage-prediction-intervals-for-robust-forecasting">6.7.17. Beyond Point Estimates: Leverage Prediction Intervals for Robust Forecasting</a></li>
533533
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#generative-pre-trained-forecasting-with-timegpt">6.7.18. Generative Pre-trained Forecasting with TimeGPT</a></li>
534534
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#automate-time-series-feature-engineering-with-tsfresh">6.7.19. Automate Time Series Feature Engineering with tsfresh</a></li>
535+
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#tsmoothie-fast-and-flexible-tool-for-exponential-smoothing">6.7.20. tsmoothie: Fast and Flexible Tool for Exponential Smoothing</a></li>
535536
</ul>
536537
</nav>
537538
</div>
@@ -2468,6 +2469,87 @@ <h2><span class="section-number">6.7.19. </span>Automate Time Series Feature Eng
24682469
</div>
24692470
<p><a class="reference external" href="https://bit.ly/3VXi3Ks">Link to tsfresh</a>.</p>
24702471
</section>
2472+
<section id="tsmoothie-fast-and-flexible-tool-for-exponential-smoothing">
2473+
<h2><span class="section-number">6.7.20. </span>tsmoothie: Fast and Flexible Tool for Exponential Smoothing<a class="headerlink" href="#tsmoothie-fast-and-flexible-tool-for-exponential-smoothing" title="Permalink to this heading">#</a></h2>
2474+
<div class="cell tag_hide-cell docutils container">
2475+
<details class="hide above-input">
2476+
<summary aria-label="Toggle hidden content">
2477+
<span class="collapsed">Show code cell content</span>
2478+
<span class="expanded">Hide code cell content</span>
2479+
</summary>
2480+
<div class="cell_input docutils container">
2481+
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="o">--</span><span class="n">upgrade</span> <span class="n">tsmoothie</span>
2482+
</pre></div>
2483+
</div>
2484+
</div>
2485+
</details>
2486+
</div>
2487+
<p>Exponential smoothing is useful for capturing the underlying pattern in the data, especially for data with a strong trend or seasonal component.</p>
2488+
<p>tsmoothie is designed to be fast and efficient and provides a wide range of smoothing techniques.</p>
2489+
<p>To see how tsmoothie works, let’s generate a single random walk time series of length 200 using the <code class="docutils literal notranslate"><span class="pre">sim_randomwalk()</span></code> function.</p>
2490+
<div class="cell docutils container">
2491+
<div class="cell_input docutils container">
2492+
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
2493+
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
2494+
<span class="kn">from</span> <span class="nn">tsmoothie.utils_func</span> <span class="kn">import</span> <span class="n">sim_randomwalk</span>
2495+
<span class="kn">from</span> <span class="nn">tsmoothie.smoother</span> <span class="kn">import</span> <span class="n">LowessSmoother</span>
2496+
2497+
<span class="c1"># generate a random walk of length 200</span>
2498+
<span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">123</span><span class="p">)</span>
2499+
<span class="n">data</span> <span class="o">=</span> <span class="n">sim_randomwalk</span><span class="p">(</span><span class="n">n_series</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">timesteps</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">process_noise</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">measure_noise</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
2500+
</pre></div>
2501+
</div>
2502+
</div>
2503+
</div>
2504+
<p>Next, create a <code class="docutils literal notranslate"><span class="pre">LowessSmoother</span></code> object with a <code class="docutils literal notranslate"><span class="pre">smooth_fraction</span></code> of <code class="docutils literal notranslate"><span class="pre">0.1</span></code> (i.e., 10% of the data points are used for local regression) and 1 iteration. We then apply the smoothing operation to the data using the <code class="docutils literal notranslate"><span class="pre">smooth()</span></code> method.</p>
2505+
<div class="cell docutils container">
2506+
<div class="cell_input docutils container">
2507+
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># operate smoothing</span>
2508+
<span class="n">smoother</span> <span class="o">=</span> <span class="n">LowessSmoother</span><span class="p">(</span><span class="n">smooth_fraction</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">iterations</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
2509+
<span class="n">smoother</span><span class="o">.</span><span class="n">smooth</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
2510+
</pre></div>
2511+
</div>
2512+
</div>
2513+
<div class="cell_output docutils container">
2514+
<div class="output text_plain highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>&lt;tsmoothie.smoother.LowessSmoother&gt;
2515+
</pre></div>
2516+
</div>
2517+
</div>
2518+
</div>
2519+
<p>After smoothing the data, we use the <code class="docutils literal notranslate"><span class="pre">get_intervals()</span></code> method of the <code class="docutils literal notranslate"><span class="pre">LowessSmoother</span></code> object to calculate the lower and upper bounds of the prediction interval for the smoothed time series.</p>
2520+
<div class="cell docutils container">
2521+
<div class="cell_input docutils container">
2522+
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># generate intervals</span>
2523+
<span class="n">low</span><span class="p">,</span> <span class="n">up</span> <span class="o">=</span> <span class="n">smoother</span><span class="o">.</span><span class="n">get_intervals</span><span class="p">(</span><span class="s2">&quot;prediction_interval&quot;</span><span class="p">)</span>
2524+
</pre></div>
2525+
</div>
2526+
</div>
2527+
</div>
2528+
<p>Finally, we plot the smoothed time series (as a blue line), and the prediction interval (as a shaded region) using matplotlib.</p>
2529+
<div class="cell docutils container">
2530+
<div class="cell_input docutils container">
2531+
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># plot the smoothed time series with intervals</span>
2532+
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
2533+
2534+
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">smoother</span><span class="o">.</span><span class="n">smooth_data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;blue&quot;</span><span class="p">)</span>
2535+
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">smoother</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">&quot;.k&quot;</span><span class="p">)</span>
2536+
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;timeseries&quot;</span><span class="p">)</span>
2537+
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">&quot;time&quot;</span><span class="p">)</span>
2538+
2539+
<span class="n">plt</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">smoother</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])),</span> <span class="n">low</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">up</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.3</span><span class="p">)</span>
2540+
</pre></div>
2541+
</div>
2542+
</div>
2543+
<div class="cell_output docutils container">
2544+
<div class="output text_plain highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>&lt;matplotlib.collections.PolyCollection at 0x15b25a8e0&gt;
2545+
</pre></div>
2546+
</div>
2547+
<img alt="../_images/840e0ccc6c7a2320f574a46fe4268a67c7d9ae598452c43ea0f50d604fc8c185.png" src="../_images/840e0ccc6c7a2320f574a46fe4268a67c7d9ae598452c43ea0f50d604fc8c185.png" />
2548+
</div>
2549+
</div>
2550+
<p>This graph effectively highlights the trend and seasonal components present in the time series data through the use of a smoothed representation.</p>
2551+
<p><a class="reference external" href="https://bit.ly/3L8KXky">Link to tsmoothie</a>.</p>
2552+
</section>
24712553
</section>
24722554

24732555
<script type="text/x-thebe-config">
@@ -2552,6 +2634,7 @@ <h2><span class="section-number">6.7.19. </span>Automate Time Series Feature Eng
25522634
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#beyond-point-estimates-leverage-prediction-intervals-for-robust-forecasting">6.7.17. Beyond Point Estimates: Leverage Prediction Intervals for Robust Forecasting</a></li>
25532635
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#generative-pre-trained-forecasting-with-timegpt">6.7.18. Generative Pre-trained Forecasting with TimeGPT</a></li>
25542636
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#automate-time-series-feature-engineering-with-tsfresh">6.7.19. Automate Time Series Feature Engineering with tsfresh</a></li>
2637+
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#tsmoothie-fast-and-flexible-tool-for-exponential-smoothing">6.7.20. tsmoothie: Fast and Flexible Tool for Exponential Smoothing</a></li>
25552638
</ul>
25562639
</nav></div>
25572640

Loading

0 commit comments

Comments
 (0)