Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import numpy as np
- from sklearn.model_selection import train_test_split
- from sklearn.ensemble import RandomForestRegressor
- from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error, r2_score
- import matplotlib.pyplot as plt
- # Load data
- data = pd.read_csv('ETH-USD.csv')
- # Convert 'Date' to datetime format
- data['Date'] = pd.to_datetime(data['Date'])
- # Set 'Date' as the index
- data.set_index('Date', inplace=True)
- # Features and target variable
- features = ['Open', 'High', 'Low', 'Adj Close', 'Volume']
- # Add lag features
- for lag in [2, 7, 15, 30]:
- data[f'Close_Lag_{lag}'] = data['Close'].shift(lag)
- features.append(f'Close_Lag_{lag}')
- # Add rolling averages
- for window in [7, 15, 30]:
- data[f'Close_Rolling_Mean_{window}'] = data['Close'].rolling(window=window).mean()
- data[f'Close_Rolling_Std_{window}'] = data['Close'].rolling(window=window).std()
- features.extend([f'Close_Rolling_Mean_{window}', f'Close_Rolling_Std_{window}'])
- # Shift the features one day into the future
- data[features] = data[features].shift(1)
- # Drop rows with NaN values introduced by lag, rolling features, and shifting
- data.dropna(inplace=True)
- # Target variable
- target = 'Close'
- # Train-test split
- train_size = int(len(data) * 0.8)
- train_data, test_data = data.iloc[:train_size], data.iloc[train_size:]
- # Initialize and train a model (Random Forest Regressor, for example)
- model = RandomForestRegressor(n_estimators=100, random_state=42)
- model.fit(train_data[features], train_data[target])
- # Make predictions on the test set
- predictions = model.predict(test_data[features])
- # Evaluate the model
- mae = mean_absolute_error(test_data[target], predictions)
- mape = mean_absolute_percentage_error(test_data[target], predictions) * 100
- r2 = r2_score(test_data[target], predictions)
- print(f'Mean Absolute Error (MAE): {mae}')
- print(f'Mean Absolute Percentage Error (MAPE): {mape:.2f}%')
- print(f'R-squared (R2) Score: {r2:.4f}')
Advertisement
Add Comment
Please, Sign In to add comment