PSF-Py 0.3
PSF: Pattern Sequence-based Forecasting (PSF) algorithm

# PSF_Py
Version: 0.3\
Date: 9/4/2019\
Author: Mayur Shende, Neeraj Bokde\
Maintainer: Mayur Shende <mayur.k.shende@gmail.com>, Neeraj Bokde <neerajdhanraj@gmail.com>\
License: GPL (>= 3)\
Packaged: 2019-04-13 17:15:59 UTC\

### Introduction to Pattern Sequence based Forecasting (PSF) algorithm
Pattern Sequence Based Forecasting (PSF) takes univariate time series data as input and assist to forecast its future values. This algorithm forecasts the behavior of time series based on similarity of pattern sequences. Initially, clustering is done with the labeling of samples from database. The labels associated with samples are then used for forecasting the future behaviour of time series data.

The Algorithm Pattern Sequence based Forecasting (PSF) was first proposed by Martinez Alvarez, et al., 2008 and then modified and suggested improvement by Martinez Alvarez, et al., 2011. The technical detailes are mentioned in referenced articles. PSF algorithm consists of various statistical operations like:

* Data Normalization/ Denormalization
* Calculation of optimum Window size (W)
* Calculation of optimum cluster size (k)
* Pattern Sequence based Forecasting
* RMSE/MAE Calculation, etc..

---

### Example 1:

```python   
from PSF_Py import Psf, get_ts
import pandas as pd

ts = get_ts('nottem')

# Creating PSF model for prediction.
a = Psf(data = ts, cycle = 12)

# Use predict to predict the values
a.predict(n_ahead = 12)

# Print the model
a.model_print()

# Plot the time series
a.psf_plot(ts, a.preds)
```    
Output : 
    
    Original time-series : 
    0      40.6
    1      40.8
    2      44.4
    3      46.7
    4      54.1
    5      58.5
    6      57.7
    7      56.4
    8      54.3
    9      50.5
    10     42.9
    11     39.8
    12     44.2
    13     39.8
    14     45.1
    15     47.0
    16     54.1
    17     58.7
    18     66.3
    19     59.9
    20     57.0
    21     54.2
    22     39.7
    23     42.8
    24     37.5
    25     38.7
    26     39.5
    27     42.1
    28     55.7
    29     57.8
           ... 
    210    61.4
    211    61.8
    212    56.3
    213    50.9
    214    41.4
    215    37.1
    216    42.1
    217    41.2
    218    47.3
    219    46.6
    220    52.4
    221    59.0
    222    59.6
    223    60.4
    224    57.0
    225    50.7
    226    47.8
    227    39.2
    228    39.4
    229    40.9
    230    42.4
    231    47.8
    232    52.4
    233    58.0
    234    60.7
    235    61.8
    236    58.2
    237    46.7
    238    46.6
    239    37.8
    Name: nottem, Length: 240, dtype: float64
    
    Predicted Values : 
     [39.4 40.9 42.4 47.8 52.4 58.  60.7 61.8 58.2 46.7 46.6 37.8]
    
    k =  3
    
    w =  12
    
    cycle =  12

[//]: # (TODO: Add image)

---

### Example 2:

```python
from PSF_Py import Psf, get_ts
import pandas as pd

ts = get_ts('penguin')

# Creating PSF model for prediction.
a = Psf(data=ts, cycle=12)

# Use predict to predict the values
a.predict(n_ahead=12)

# Print the model
a.model_print()

# Plot the time series
a.psf_plot(ts, a.preds)
```

Output:

    Original time-series : 
    0      753
    1      448
    2      356
    3      504
    4      698
    5      256
    6      361
    7      476
    8      541
    9      812
    10     914
    11     998
    12     762
    13     461
    14     374
    15     521
    16     712
    17     274
    18     384
    19     492
    20     561
    21     821
    22     930
    23    1014
    24     779
    25     478
    26     391
    27     543
    28     910
    29     287
          ... 
    54     225
    55     304
    56     416
    57     642
    58     769
    59     853
    60     572
    61     273
    62     208
    63     341
    64     553
    65     136
    66     231
    67     299
    68     403
    69     632
    70     759
    71     848
    72     561
    73     268
    74     212
    75     331
    76     542
    77     128
    78     225
    79     301
    80     389
    81     624
    82     748
    83     842
    Name: Number, Length: 84, dtype: int64
    
    Predicted Values : 
     [572. 273. 208. 341. 553. 136. 231. 299. 403. 632. 759. 848.]
    
    k =  3
    
    w =  14
    
    cycle =  12

[//]: # (TODO: Add Image)

---