from keras.models import Sequential
from keras.layers import SimpleRNN, Dense, Dropout
# Define the RNN model
def build_rnn_model(input_shape):
model = Sequential()
model.add(SimpleRNN(units=50, return_sequences=True, input_shape=input_shape))
model.add(Dropout(0.2))
model.add(SimpleRNN(units=50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1)) # Output layer for prediction
model.compile(optimizer='adam', loss='mean_squared_error')
return model
# Build the RNN model
rnn_model = build_rnn_model(X_train.shape[1:])
# Train the model
rnn_history = rnn_model.fit(X_train, y_train, epochs=70, batch_size=32, validation_data=(X_test, y_test))
# Evaluate the model
predicted_stock_price_rnn = rnn_model.predict(X_test)
predicted_stock_price_rnn = scaler.inverse_transform(predicted_stock_price_rnn)
# Inverse scale the actual stock prices
y_test_scaled = scaler.inverse_transform(y_test.reshape(-1, 1))
# Calculate MAPE for RNN
mape_rnn = mean_absolute_percentage_error(y_test_scaled, predicted_stock_price_rnn)
print(f"Mean Absolute Percentage Error (MAPE) for RNN: {mape_rnn:.2f}%")
# Plot the results for RNN model
plt.figure(figsize=(12, 6))
plt.plot(y_test_scaled, label="Actual Tesla Stock Price", color='blue')
plt.plot(predicted_stock_price_rnn, label="Predicted Tesla Stock Price", color='red')
plt.title('Tesla Stock Price Prediction with RNN', fontsize=14)
plt.xlabel('Time', fontsize=12)
plt.ylabel(' Scaled Stock Price (USD)', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()