Spaces:
Runtime error
Runtime error
| # FORECASTING EXPERT ARIMA TOOLS | |
| from datetime import datetime, timedelta | |
| import pandas as pd | |
| from statsmodels.tsa.arima.model import ARIMA | |
| from sklearn.metrics import mean_absolute_error | |
| from pydantic.v1 import BaseModel, Field | |
| from langchain.tools import BaseTool | |
| from typing import Optional, Type | |
| from langchain.tools import StructuredTool | |
| def forecasting_expert_arima_tools(): | |
| def ARIMA_forecast(symbol,historical_data, train_days_ago, forecast_days): | |
| """Useful for forecasting a variable using ARIMA model. | |
| Use historical 'Close' stock prices and get prediction. | |
| Give prediction output to the client. | |
| Give mae_arima from the model to Evaluator. | |
| """ | |
| df=historical_data[['Close']] | |
| df.index=pd.to_datetime(df.index) | |
| model = ARIMA(df.dropna(), order=(2,0,2)) | |
| model_fit = model.fit() | |
| # Split the data into training and testing sets | |
| train_size = int(len(df) * 0.8) | |
| train, test = df.iloc[:train_size], df.iloc[train_size:] | |
| # Fit the ARIMA model on the training set | |
| model = ARIMA(train.dropna(), order=(2, 0, 2)) | |
| model_fit = model.fit() | |
| # Make predictions | |
| predictions = model_fit.forecast(steps=len(test)) | |
| #test['Predicted'] = predictions | |
| # Calculate the MAE | |
| mae_arima = mean_absolute_error(test['Close'], predictions) | |
| # plt.plot(y_test, label='Actual') | |
| # plt.plot(y_pred, label='Predicted') | |
| # plt.legend() | |
| # plt.show() | |
| forecast = model_fit.get_forecast(forecast_days).predicted_mean | |
| arima_prediction=forecast | |
| return {"arima_prediction": arima_prediction,"mae_arima": mae_arima} | |
| class PredictStocksARIMAInput(BaseModel): | |
| """Input for Stock ticker check.""" | |
| stockticker: str = Field(..., description="Ticker symbol for stock or index") | |
| days_ago: int = Field(..., description="Int number of days to look back") | |
| class PredictStocksARIMATool(BaseTool): | |
| name = "ARIMA_forecast" | |
| description = "Useful for forecasting stock prices using ARIMA model." | |
| def _run(self, stockticker: str, days_ago: int,historical_data: float, train_days_ago=int, forecast_days=int): | |
| arima_prediction = ARIMA_forecast(stockticker,historical_data, train_days_ago, forecast_days).predicted_price | |
| mae_arima== ARIMA_forecast(stockticker,historical_data, train_days_ago, forecast_days).mae_arima | |
| return {"arima_prediction":arima_prediction,"mae_arima":mae_arima} | |
| def _arun(self, stockticker: str, days_ago: int,historical_data: float, train_days_ago=int, forecast_days=int): | |
| raise NotImplementedError("This tool does not support async") | |
| args_schema: Optional[Type[BaseModel]] = PredictStocksARIMAInput | |
| tools_forecasting_expert_arima = [ | |
| StructuredTool.from_function( | |
| func=PredictStocksARIMATool, | |
| args_schema=PredictStocksARIMAInput, | |
| description="Function to predict stock prices with ARIMA model and to get mae_arima for the model.", | |
| ), | |
| StructuredTool.from_function( | |
| func=PredictStocksARIMATool, | |
| args_schema=PredictStocksARIMAInput, | |
| description="Function to predict stock prices with ARIMA model and to get mae_arima for the model.", | |
| ) | |
| ] | |
| return tools_forecasting_expert_arima |