Files
OpenBB/openbb_terminal/common/prediction_techniques/arima_model.py
jmaslek b71abcfbf4 Updating some names (#1575)
* quick econ fix

* black

* keys and feature flags

* terminal name 👀

* some more replacements

* some more replacements

* edit pyproject

* gst -> openbb

* add example portfolios back to git

* Update api from gst

* sorry.  skipping some tests

* another round of names

* another round of test edits

* Missed some .gst refs and update timezone

* water mark stuff

* Fixing Names in terminal.spec and name of GTFF_DEFAULTS to OBBFF_DEFAULTS

* fix more GST to OpenBB Terminal

* Logging : merge conflicts with main

* Revert wrong files

Co-authored-by: Andrew <andrew.kenreich@gmail.com>
Co-authored-by: DidierRLopes <dro.lopes@campus.fct.unl.pt>
Co-authored-by: Chavithra PARANA <chavithra@gmail.com>
2022-03-29 09:46:26 -04:00

77 lines
1.8 KiB
Python

"""Arima Prediction Model"""
__docformat__ = "numpy"
import logging
from typing import Any, List, Tuple, Union
import pandas as pd
import pmdarima
from statsmodels.tsa.arima.model import ARIMA
from openbb_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
ICS = ["aic", "aicc", "bic", "hqic", "oob"]
@log_start_end(log=logger)
def get_arima_model(
values: Union[pd.Series, pd.DataFrame],
arima_order: str,
n_predict: int,
seasonal: bool,
ic: str,
) -> Tuple[List[float], Any]:
"""Get an ARIMA model for data
Parameters
----------
values : Union[pd.Series, pd.DataFrame]
Data to fit
arima_order : str
String of ARIMA params in form "p,q,d"
n_predict : int
Days to predict
seasonal : bool
Flag to use seasonal model
ic : str
Information Criteria for model evaluation
Returns
-------
List[float]
List of predicted values
Any
Fit ARIMA model object.
"""
if arima_order:
model = ARIMA(
values, order=tuple(int(ord) for ord in arima_order.split(","))
).fit()
l_predictions = list(
model.predict(
start=len(values.values) + 1,
end=len(values.values) + n_predict,
)
)
else:
if seasonal:
model = pmdarima.auto_arima(
values.values,
error_action="ignore",
seasonal=True,
m=5,
information_criteria=ic,
)
else:
model = pmdarima.auto_arima(
values.values,
error_action="ignore",
seasonal=False,
information_criteria=ic,
)
l_predictions = list(model.predict(n_predict))
return l_predictions, model