diff --git a/Traffic Accident Prediction Model using Deep Learning /Dataset/README.md b/Traffic Accident Prediction Model using Deep Learning /Dataset/README.md
new file mode 100644
index 000000000..32994416c
--- /dev/null
+++ b/Traffic Accident Prediction Model using Deep Learning /Dataset/README.md
@@ -0,0 +1,38 @@
+# Dataset Overview
+
+The project uses a synthetic dataset to simulate traffic accident occurrences based on several conditions over a one-year period (365 days). This data is intended to train a deep learning model, specifically an LSTM, for predicting accidents based on historical trends.
+
+## Dataset Structure
+
+The dataset includes the following features:
+
+| Feature | Description | Type |
+|----------------------|----------------------------------------------------------------------------------------------|-----------|
+| **Date** | A sequence of dates over one year, used as the time basis for other data. | Date |
+| **Traffic Volume** | Simulated daily traffic volume, with random values within a range (e.g., 100 to 2000). | Integer |
+| **Weather Condition**| Categorical data representing different weather scenarios, including `clear`, `rain`, `fog`, and `snow`. | Categorical |
+| **Road Type** | Categorical data representing types of roads, such as `highway`, `urban road`, and `rural road`. | Categorical |
+| **Accident Occurred**| Binary indicator of whether an accident occurred on a given day, based on traffic and weather conditions. | Binary |
+
+## Accident Occurrence Simulation
+
+The likelihood of an accident is influenced by:
+
+- **Weather Conditions**: Higher chance of accidents under `rain`, `fog`, or `snow`.
+- **Traffic Volume**: Accidents become more likely with increased traffic volume, particularly above 1500 vehicles per day.
+
+For example:
+- A 30% chance of an accident occurs when traffic is high and the weather is adverse.
+- A lower, 5% base chance is assigned for normal conditions.
+
+## Example Dataset (First 5 Rows)
+
+| Date | Traffic Volume | Weather Condition | Road Type | Accident Occurred |
+|------------|----------------|-------------------|--------------|--------------------|
+| 2023-01-01 | 1500 | Clear | Urban road | 0 |
+| 2023-01-02 | 1800 | Rain | Highway | 1 |
+| 2023-01-03 | 1300 | Fog | Rural road | 0 |
+| 2023-01-04 | 1900 | Snow | Highway | 1 |
+| 2023-01-05 | 1200 | Clear | Urban road | 0 |
+
+This structured data is used to train the LSTM model for predicting accident probabilities, with categorical features encoded and normalized for model readiness.
diff --git a/Traffic Accident Prediction Model using Deep Learning /Images/image b/Traffic Accident Prediction Model using Deep Learning /Images/image
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/Traffic Accident Prediction Model using Deep Learning /Images/image
@@ -0,0 +1 @@
+
diff --git a/Traffic Accident Prediction Model using Deep Learning /Images/image 1.png b/Traffic Accident Prediction Model using Deep Learning /Images/image 1.png
new file mode 100644
index 000000000..3544dfd91
Binary files /dev/null and b/Traffic Accident Prediction Model using Deep Learning /Images/image 1.png differ
diff --git a/Traffic Accident Prediction Model using Deep Learning /Images/image 2. png b/Traffic Accident Prediction Model using Deep Learning /Images/image 2. png
new file mode 100644
index 000000000..ce4a946a6
Binary files /dev/null and b/Traffic Accident Prediction Model using Deep Learning /Images/image 2. png differ
diff --git a/Traffic Accident Prediction Model using Deep Learning /Images/image 3 .png b/Traffic Accident Prediction Model using Deep Learning /Images/image 3 .png
new file mode 100644
index 000000000..7698bfbc8
Binary files /dev/null and b/Traffic Accident Prediction Model using Deep Learning /Images/image 3 .png differ
diff --git a/Traffic Accident Prediction Model using Deep Learning /Model/README.md b/Traffic Accident Prediction Model using Deep Learning /Model/README.md
new file mode 100644
index 000000000..5deda3a91
--- /dev/null
+++ b/Traffic Accident Prediction Model using Deep Learning /Model/README.md
@@ -0,0 +1,149 @@
+# π¦ Traffic Accident Prediction Model using Deep Learning
+
+Welcome to the **Traffic Accident Prediction** project! This project utilizes machine learning techniques and historical data (e.g., accident records, weather conditions, traffic volume, road characteristics) to predict the likelihood of traffic accidents. Our aim is to provide insights into high-risk areas and conditions, enabling local authorities to implement targeted safety measures and improve traffic management strategies.
+
+---
+
+## π Table of Contents
+- [Overview](#overview)
+- [Features](#features)
+- [Installation](#installation)
+- [Usage](#usage)
+- [Dataset](#dataset)
+- [Model Architecture](#model-architecture)
+- [Evaluation](#evaluation)
+- [Results](#results)
+- [Future Improvements](#future-improvements)
+- [Contributing](#contributing)
+- [License](#license)
+
+---
+
+## π Overview
+Traffic accidents can have severe consequences, both human and economic. This project aims to leverage deep learning to predict accident risks based on various features:
+- π
**Date & Time**
+- π¦οΈ **Weather Conditions**
+- π **Traffic Volume**
+- π£οΈ **Road Characteristics**
+
+By identifying high-risk situations, the model helps authorities and traffic planners reduce accident occurrences and improve public safety.
+
+---
+
+## β¨ Features
+- β
**Accurate Predictions**: Provides reliable accident risk assessments based on multiple inputs.
+- π **Data Visualization**: Visualizes accident patterns with charts and graphs for better insights.
+- π§ **Model Evaluation**: Uses evaluation metrics like accuracy, precision, recall, and F1-score.
+- π **Scalable**: Easily extendable to include more features like traffic camera data.
+
+---
+
+## βοΈ Installation
+
+To get started, clone this repository and install the required dependencies:
+
+```bash
+git clone https://github.com/alo7lika/traffic-accident-prediction.git
+cd traffic-accident-prediction
+pip install -r requirements.txt
+```
+Ensure you have Python 3.8+ installed along with the necessary libraries (e.g., `pandas`, `numpy`, `scikit-learn`, `tensorflow`).
+
+---
+
+## π Usage
+
+To run the model, follow these steps:
+
+1. **Preprocess the Dataset**:
+ ```bash
+ python preprocess_data.py
+2. **Train the Model**:
+ ```bash
+ python train_model.py
+ ```
+3. **Evaluate the Model**:
+ ```bash
+ python evaluate_model.py
+ ```
+Make sure the dataset is correctly placed in the `data/` directory. You can adjust the hyperparameters in `config.yaml`.
+
+---
+
+## ποΈ Dataset
+
+| Feature | Description |
+|-------------------|--------------------------------------|
+| `date_time` | Date and time of the incident |
+| `weather` | Weather conditions at the time |
+| `traffic_volume` | Number of vehicles passing per hour |
+| `road_type` | Type of road (highway, city road) |
+
+The dataset is stored as a CSV file in the `data/` folder. If you have new data, update the file accordingly.
+
+---
+
+## ποΈ Model Architecture
+
+The model consists of a Convolutional Neural Network (CNN) and Long Short-Term Memory (LSTM) layers for feature extraction and time-series analysis. The architecture includes:
+
+- **Input Layer**: Processes the input features (e.g., weather, traffic volume).
+- **CNN Layers**: Extracts spatial features.
+- **LSTM Layers**: Captures temporal dependencies.
+- **Dense Layers**: Combines extracted features and outputs the prediction.
+
+---
+
+## π Evaluation
+
+The modelβs performance is evaluated using the following metrics:
+
+| Metric | Description |
+|-------------|--------------------------------------------------|
+| **Accuracy**| The overall correctness of the model |
+| **Precision**| Ratio of correctly predicted positive observations |
+| **Recall** | Ratio of correctly predicted positive observations to the actual positives |
+| **F1-Score**| Harmonic mean of precision and recall |
+
+---
+
+## π Results
+
+The model achieved the following performance on the test dataset:
+
+| Metric | Value |
+|----------|-------|
+| Accuracy | 92% |
+| Precision| 89% |
+| Recall | 90% |
+| F1-Score | 89.5% |
+
+You can visualize the model's predictions using the `visualize_results.py` script.
+
+---
+
+## π Future Improvements
+
+- π **Real-time data integration**: Incorporate live traffic and weather data for real-time accident risk assessment.
+- π°οΈ **Satellite data**: Integrate satellite imagery for more precise road condition analysis.
+- π§ **Model Optimization**: Fine-tune hyperparameters and try other neural network architectures.
+
+---
+
+## π€ Contributing
+
+Contributions are welcome! Follow these steps to contribute:
+
+1. Fork the repository.
+2. Create a new branch (`git checkout -b feature-branch`).
+3. Commit your changes (`git commit -m "Add feature"`).
+4. Push to the branch (`git push origin feature-branch`).
+5. Open a Pull Request.
+
+Please read the [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
+
+---
+
+## π License
+
+This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details.
diff --git a/Traffic Accident Prediction Model using Deep Learning /Model/Traffic Accident Prediction Model using Deep Learning.ipynb b/Traffic Accident Prediction Model using Deep Learning /Model/Traffic Accident Prediction Model using Deep Learning.ipynb
new file mode 100644
index 000000000..bfe7600f2
--- /dev/null
+++ b/Traffic Accident Prediction Model using Deep Learning /Model/Traffic Accident Prediction Model using Deep Learning.ipynb
@@ -0,0 +1,568 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "792c2779-a4f3-4f53-8d94-6ee1dcdf26d4",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: pandas in c:\\users\\asus\\anaconda3\\lib\\site-packages (2.1.4)\n",
+ "Requirement already satisfied: numpy in c:\\users\\asus\\anaconda3\\lib\\site-packages (1.26.4)\n",
+ "Requirement already satisfied: tensorflow in c:\\users\\asus\\anaconda3\\lib\\site-packages (2.16.2)\n",
+ "Requirement already satisfied: scikit-learn in c:\\users\\asus\\anaconda3\\lib\\site-packages (1.2.2)\n",
+ "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from pandas) (2.8.2)\n",
+ "Requirement already satisfied: pytz>=2020.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from pandas) (2023.3.post1)\n",
+ "Requirement already satisfied: tzdata>=2022.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from pandas) (2023.3)\n",
+ "Requirement already satisfied: tensorflow-intel==2.16.2 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow) (2.16.2)\n",
+ "Requirement already satisfied: absl-py>=1.0.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (2.1.0)\n",
+ "Requirement already satisfied: astunparse>=1.6.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (1.6.3)\n",
+ "Requirement already satisfied: flatbuffers>=23.5.26 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (24.3.25)\n",
+ "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (0.6.0)\n",
+ "Requirement already satisfied: google-pasta>=0.1.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (0.2.0)\n",
+ "Requirement already satisfied: h5py>=3.10.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (3.11.0)\n",
+ "Requirement already satisfied: libclang>=13.0.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (18.1.1)\n",
+ "Requirement already satisfied: ml-dtypes~=0.3.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (0.3.2)\n",
+ "Requirement already satisfied: opt-einsum>=2.3.2 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (3.3.0)\n",
+ "Requirement already satisfied: packaging in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (23.1)\n",
+ "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (4.25.5)\n",
+ "Requirement already satisfied: requests<3,>=2.21.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (2.31.0)\n",
+ "Requirement already satisfied: setuptools in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (68.2.2)\n",
+ "Requirement already satisfied: six>=1.12.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (1.16.0)\n",
+ "Requirement already satisfied: termcolor>=1.1.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (2.4.0)\n",
+ "Requirement already satisfied: typing-extensions>=3.6.6 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (4.9.0)\n",
+ "Requirement already satisfied: wrapt>=1.11.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (1.14.1)\n",
+ "Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (1.66.2)\n",
+ "Requirement already satisfied: tensorboard<2.17,>=2.16 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (2.16.2)\n",
+ "Requirement already satisfied: keras>=3.0.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (3.4.1)\n",
+ "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.16.2->tensorflow) (0.31.0)\n",
+ "Requirement already satisfied: scipy>=1.3.2 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from scikit-learn) (1.11.4)\n",
+ "Requirement already satisfied: joblib>=1.1.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from scikit-learn) (1.2.0)\n",
+ "Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from scikit-learn) (2.2.0)\n",
+ "Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.16.2->tensorflow) (0.41.2)\n",
+ "Requirement already satisfied: rich in c:\\users\\asus\\anaconda3\\lib\\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.2->tensorflow) (13.3.5)\n",
+ "Requirement already satisfied: namex in c:\\users\\asus\\anaconda3\\lib\\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.2->tensorflow) (0.0.8)\n",
+ "Requirement already satisfied: optree in c:\\users\\asus\\anaconda3\\lib\\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.2->tensorflow) (0.11.0)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.2->tensorflow) (2.0.4)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.2->tensorflow) (3.4)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.2->tensorflow) (2.0.7)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.2->tensorflow) (2024.2.2)\n",
+ "Requirement already satisfied: markdown>=2.6.8 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.2->tensorflow) (3.4.1)\n",
+ "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.2->tensorflow) (0.7.2)\n",
+ "Requirement already satisfied: werkzeug>=1.0.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.2->tensorflow) (2.2.3)\n",
+ "Requirement already satisfied: MarkupSafe>=2.1.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from werkzeug>=1.0.1->tensorboard<2.17,>=2.16->tensorflow-intel==2.16.2->tensorflow) (2.1.3)\n",
+ "Requirement already satisfied: markdown-it-py<3.0.0,>=2.2.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from rich->keras>=3.0.0->tensorflow-intel==2.16.2->tensorflow) (2.2.0)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from rich->keras>=3.0.0->tensorflow-intel==2.16.2->tensorflow) (2.15.1)\n",
+ "Requirement already satisfied: mdurl~=0.1 in c:\\users\\asus\\anaconda3\\lib\\site-packages (from markdown-it-py<3.0.0,>=2.2.0->rich->keras>=3.0.0->tensorflow-intel==2.16.2->tensorflow) (0.1.0)\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install pandas numpy tensorflow scikit-learn"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "dc60e63c-dc53-4c40-a84f-01872990aa2a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " date traffic_volume weather_condition road_type accident_occurred\n",
+ "0 2023-01-01 1226 fog urban road 0\n",
+ "1 2023-01-02 1559 snow rural road 0\n",
+ "2 2023-01-03 960 snow highway 0\n",
+ "3 2023-01-04 1394 fog rural road 0\n",
+ "4 2023-01-05 1230 snow urban road 0\n"
+ ]
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import random\n",
+ "from datetime import timedelta, datetime\n",
+ "\n",
+ "# Set random seed for reproducibility\n",
+ "np.random.seed(42)\n",
+ "\n",
+ "# Generate a sequence of dates (e.g., over one year)\n",
+ "def generate_dates(start_date, days):\n",
+ " return [start_date + timedelta(days=x) for x in range(days)]\n",
+ "\n",
+ "# Parameters\n",
+ "num_days = 365\n",
+ "traffic_volume_range = (100, 2000) # Simulate number of cars per day\n",
+ "weather_conditions = ['clear', 'rain', 'fog', 'snow']\n",
+ "road_types = ['highway', 'urban road', 'rural road']\n",
+ "\n",
+ "# Create base date\n",
+ "start_date = datetime(2023, 1, 1)\n",
+ "dates = generate_dates(start_date, num_days)\n",
+ "\n",
+ "# Generate data\n",
+ "data = {\n",
+ " 'date': dates,\n",
+ " 'traffic_volume': np.random.randint(traffic_volume_range[0], traffic_volume_range[1], num_days),\n",
+ " 'weather_condition': np.random.choice(weather_conditions, num_days),\n",
+ " 'road_type': np.random.choice(road_types, num_days)\n",
+ "}\n",
+ "\n",
+ "# Simulate accident occurrence based on certain conditions\n",
+ "# We'll make accidents more likely in bad weather and high traffic\n",
+ "def simulate_accident(row):\n",
+ " if row['weather_condition'] in ['rain', 'fog', 'snow'] and row['traffic_volume'] > 1500:\n",
+ " return 1 if random.random() < 0.3 else 0 # 30% chance of accident\n",
+ " elif row['traffic_volume'] > 1800:\n",
+ " return 1 if random.random() < 0.2 else 0 # 20% chance of accident\n",
+ " else:\n",
+ " return 1 if random.random() < 0.05 else 0 # 5% chance otherwise\n",
+ "\n",
+ "# Create DataFrame\n",
+ "df = pd.DataFrame(data)\n",
+ "\n",
+ "# Apply function to create accident occurrence\n",
+ "df['accident_occurred'] = df.apply(simulate_accident, axis=1)\n",
+ "\n",
+ "# Show a preview of the dataset\n",
+ "print(df.head())\n",
+ "\n",
+ "# Save dataset to CSV\n",
+ "df.to_csv('synthetic_traffic_accident_data.csv', index=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "a17718b8-07fb-4ba9-892c-8fdd5aa7eb98",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " date traffic_volume weather_condition road_type accident_occurred\n",
+ "0 2023-01-01 1226 fog urban road 0\n",
+ "1 2023-01-02 1559 snow rural road 0\n",
+ "2 2023-01-03 960 snow highway 0\n",
+ "3 2023-01-04 1394 fog rural road 0\n",
+ "4 2023-01-05 1230 snow urban road 0\n",
+ "date 0\n",
+ "traffic_volume 0\n",
+ "weather_condition 0\n",
+ "road_type 0\n",
+ "accident_occurred 0\n",
+ "dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "from sklearn.preprocessing import LabelEncoder, MinMaxScaler\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "# Load dataset\n",
+ "df = pd.read_csv('synthetic_traffic_accident_data.csv')\n",
+ "\n",
+ "# Preview the data\n",
+ "print(df.head())\n",
+ "\n",
+ "# Check for missing values\n",
+ "print(df.isnull().sum())\n",
+ "\n",
+ "# Convert 'date' to datetime\n",
+ "df['date'] = pd.to_datetime(df['date'])\n",
+ "\n",
+ "# Convert categorical features into numerical form (Label Encoding)\n",
+ "label_encoder = LabelEncoder()\n",
+ "df['weather_condition'] = label_encoder.fit_transform(df['weather_condition'])\n",
+ "df['road_type'] = label_encoder.fit_transform(df['road_type'])\n",
+ "\n",
+ "# Normalize features (LSTM requires normalized data)\n",
+ "scaler = MinMaxScaler()\n",
+ "df[['traffic_volume', 'weather_condition', 'road_type']] = scaler.fit_transform(df[['traffic_volume', 'weather_condition', 'road_type']])\n",
+ "\n",
+ "# Target column ('accident_occurred') should remain binary"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "528ff056-8dfe-4495-bafb-0dde31228858",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Training data shape: (286, 7, 3)\n",
+ "Testing data shape: (72, 7, 3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Create sequences and labels\n",
+ "def create_sequences(data, target, time_steps=7):\n",
+ " X, y = [], []\n",
+ " for i in range(len(data) - time_steps):\n",
+ " X.append(data[i:i + time_steps])\n",
+ " y.append(target[i + time_steps])\n",
+ " return np.array(X), np.array(y)\n",
+ "\n",
+ "# Define features and target\n",
+ "features = df[['traffic_volume', 'weather_condition', 'road_type']].values\n",
+ "target = df['accident_occurred'].values\n",
+ "\n",
+ "# Create sequences with a 7-day time window (adjust if needed)\n",
+ "time_steps = 7\n",
+ "X, y = create_sequences(features, target, time_steps)\n",
+ "\n",
+ "# Split into training and testing sets (80% train, 20% test)\n",
+ "train_size = int(0.8 * len(X))\n",
+ "X_train, X_test = X[:train_size], X[train_size:]\n",
+ "y_train, y_test = y[:train_size], y[train_size:]\n",
+ "\n",
+ "print(\"Training data shape: \", X_train.shape)\n",
+ "print(\"Testing data shape: \", X_test.shape)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "7ace3dcb-760d-4842-8b3e-e19e3b3e9a61",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\ASUS\\anaconda3\\Lib\\site-packages\\keras\\src\\layers\\rnn\\rnn.py:204: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
+ " super().__init__(**kwargs)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
Model: \"sequential\"\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1mModel: \"sequential\"\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "ββββββββββββββββββββββββββββββββββββββββ³ββββββββββββββββββββββββββββββ³ββββββββββββββββββ\n",
+ "β Layer (type) β Output Shape β Param # β\n",
+ "β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©\n",
+ "β lstm (LSTM) β (None, 7, 50) β 10,800 β\n",
+ "ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
+ "β dropout (Dropout) β (None, 7, 50) β 0 β\n",
+ "ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
+ "β lstm_1 (LSTM) β (None, 50) β 20,200 β\n",
+ "ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
+ "β dropout_1 (Dropout) β (None, 50) β 0 β\n",
+ "ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
+ "β dense (Dense) β (None, 1) β 51 β\n",
+ "ββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ΄ββββββββββββββββββ\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "ββββββββββββββββββββββββββββββββββββββββ³ββββββββββββββββββββββββββββββ³ββββββββββββββββββ\n",
+ "β\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0mβ\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0mβ\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0mβ\n",
+ "β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©\n",
+ "β lstm (\u001b[38;5;33mLSTM\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m50\u001b[0m) β \u001b[38;5;34m10,800\u001b[0m β\n",
+ "ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
+ "β dropout (\u001b[38;5;33mDropout\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m50\u001b[0m) β \u001b[38;5;34m0\u001b[0m β\n",
+ "ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
+ "β lstm_1 (\u001b[38;5;33mLSTM\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) β \u001b[38;5;34m20,200\u001b[0m β\n",
+ "ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
+ "β dropout_1 (\u001b[38;5;33mDropout\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) β \u001b[38;5;34m0\u001b[0m β\n",
+ "ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββ€\n",
+ "β dense (\u001b[38;5;33mDense\u001b[0m) β (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) β \u001b[38;5;34m51\u001b[0m β\n",
+ "ββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ΄ββββββββββββββββββ\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " Total params: 31,051 (121.29 KB)\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m31,051\u001b[0m (121.29 KB)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " Trainable params: 31,051 (121.29 KB)\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m31,051\u001b[0m (121.29 KB)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " Non-trainable params: 0 (0.00 B)\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import tensorflow as tf\n",
+ "from tensorflow.keras.models import Sequential\n",
+ "from tensorflow.keras.layers import LSTM, Dense, Dropout\n",
+ "\n",
+ "# Build the LSTM model\n",
+ "model = Sequential()\n",
+ "\n",
+ "# First LSTM layer with Dropout\n",
+ "model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))\n",
+ "model.add(Dropout(0.2))\n",
+ "\n",
+ "# Second LSTM layer with Dropout\n",
+ "model.add(LSTM(units=50, return_sequences=False))\n",
+ "model.add(Dropout(0.2))\n",
+ "\n",
+ "# Output layer (binary classification)\n",
+ "model.add(Dense(units=1, activation='sigmoid'))\n",
+ "\n",
+ "# Compile the model\n",
+ "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n",
+ "\n",
+ "# Model summary\n",
+ "model.summary()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "4cd279e5-b211-4122-ae08-ce4e5ca03a1e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 1/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 120ms/step - accuracy: 0.7830 - loss: 0.6564 - val_accuracy: 0.9028 - val_loss: 0.5349\n",
+ "Epoch 2/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - accuracy: 0.8766 - loss: 0.5079 - val_accuracy: 0.9028 - val_loss: 0.3351\n",
+ "Epoch 3/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - accuracy: 0.8913 - loss: 0.3606 - val_accuracy: 0.9028 - val_loss: 0.3093\n",
+ "Epoch 4/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - accuracy: 0.8713 - loss: 0.4032 - val_accuracy: 0.9028 - val_loss: 0.3042\n",
+ "Epoch 5/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - accuracy: 0.8804 - loss: 0.3650 - val_accuracy: 0.9028 - val_loss: 0.3110\n",
+ "Epoch 6/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - accuracy: 0.8901 - loss: 0.3489 - val_accuracy: 0.9028 - val_loss: 0.3063\n",
+ "Epoch 7/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - accuracy: 0.8715 - loss: 0.3820 - val_accuracy: 0.9028 - val_loss: 0.3045\n",
+ "Epoch 8/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 21ms/step - accuracy: 0.8997 - loss: 0.3275 - val_accuracy: 0.9028 - val_loss: 0.3032\n",
+ "Epoch 9/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - accuracy: 0.8932 - loss: 0.3445 - val_accuracy: 0.9028 - val_loss: 0.3116\n",
+ "Epoch 10/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - accuracy: 0.8953 - loss: 0.3413 - val_accuracy: 0.9028 - val_loss: 0.3069\n",
+ "Epoch 11/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - accuracy: 0.8875 - loss: 0.3472 - val_accuracy: 0.9028 - val_loss: 0.3051\n",
+ "Epoch 12/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - accuracy: 0.8968 - loss: 0.3320 - val_accuracy: 0.9028 - val_loss: 0.3051\n",
+ "Epoch 13/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - accuracy: 0.8698 - loss: 0.3828 - val_accuracy: 0.9028 - val_loss: 0.3073\n",
+ "Epoch 14/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 23ms/step - accuracy: 0.9009 - loss: 0.3268 - val_accuracy: 0.9028 - val_loss: 0.3061\n",
+ "Epoch 15/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 21ms/step - accuracy: 0.9051 - loss: 0.3089 - val_accuracy: 0.9028 - val_loss: 0.3062\n",
+ "Epoch 16/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 23ms/step - accuracy: 0.9134 - loss: 0.2947 - val_accuracy: 0.9028 - val_loss: 0.3058\n",
+ "Epoch 17/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - accuracy: 0.8769 - loss: 0.3587 - val_accuracy: 0.9028 - val_loss: 0.3111\n",
+ "Epoch 18/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 20ms/step - accuracy: 0.8957 - loss: 0.3315 - val_accuracy: 0.9028 - val_loss: 0.3050\n",
+ "Epoch 19/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 18ms/step - accuracy: 0.8807 - loss: 0.3706 - val_accuracy: 0.9028 - val_loss: 0.3065\n",
+ "Epoch 20/20\n",
+ "\u001b[1m9/9\u001b[0m \u001b[32mββββββββββββββββββββ\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - accuracy: 0.8656 - loss: 0.3980 - val_accuracy: 0.9028 - val_loss: 0.3063\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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hCh3rMy8efPg6+uL7t27w8jICMOGDUNgYCAAQC6X1+qaABAWFgZLS0vp5ejoWMvWEBERUUOgtQDUrFkzyOXycj0zmZmZ5XpwypiYmCAyMhIPHjzA1atXkZaWBmdnZ5ibm6NZs2YAADs7O7WuCQChoaHIzs6WXteuXXvC1hEREZEu01oAUigUcHd3R2xsrMrx2NhYeHp6VnmukZERWrZsCblcjs2bN2Pw4MEwMHjUlB49epS75r59+6q8plKphIWFhcqLiIiIGi9DbX74zJkz4e/vDw8PD/To0QPr169HWloapkyZAuBRz8yNGzekvX4uXryIX375Bd26dcPdu3excuVKnDt3Dl9++aV0zRkzZuDFF1/E+++/j2HDhuF///sf9u/fL60SIyIiItJqAPLz80NWVhYWL16M9PR0uLq6Ys+ePXBycgIApKenq+wJVFJSghUrVuDChQswMjJC3759ERcXB2dnZ6mMp6cnNm/ejLlz52LevHl4+umnERMTg27dutV384iIiEhHaXUfIF3FfYCIiIgangaxDxARERGRtjAAERERkd5hACIiIiK9wwBEREREeocBiIiIiPQOAxARERHpHQYgIiIi0jsMQERERKR3GICIiIhI7zAAERERkd5hACIiIiK9wwBEREREeocBiIiIiPQOAxARERHpHQYgIiIi0jsMQERERKR3GICIiIhI7zAAERERkd5hACIiIiK9wwBEREREeocBiIiIiPQOAxARERHpHQYgIiIi0jsMQERERKR3GICIiIhI7zAAERERkd5hACIiIiK9wwBEREREeocBiIiIiPQOAxARERHpHQYgIiIi0jsMQERERKR3GICIiIhI7zAAERERkd5hACIiIiK9wwBEREREeocBiIiIiPQOAxARERHpHQYgIiIi0jsMQERERKR3GICIiIhI7zAAERERkd7RegBat24dXFxcYGxsDHd3dxw9erTK8tHR0XBzc4OpqSns7e0xfvx4ZGVlSe8XFRVh8eLFePrpp2FsbAw3Nzfs3bu3rptBREREDYhWA1BMTAxCQkIwZ84cJCYmwsvLC76+vkhLS6uw/LFjxzBu3DgEBQXh/Pnz2Lp1K+Lj4zFx4kSpzNy5c/F///d/WLNmDZKTkzFlyhS88sorSExMrK9mERERkY6TCSGEtj68W7dueOGFFxAeHi4d69ChA4YPH46w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wtzc/In3GXhcTk4OHB0dce3aNVhYWGj02rqGbW289Km9bGvjpU/t1Ze2CiGQm5sLBweHapfKsweoAgYGBmjZsmWdfoaFhUWj/kv4T2xr46VP7WVbGy99aq8+tLW6np8ynARNREREeocBiIiIiPQOA1A9UyqVWLBgAZRKpbarUufY1sZLn9rLtjZe+tRefWprTXESNBEREekd9gARERGR3mEAIiIiIr3DAERERER6hwGIiIiI9A4DUB1Yt24dXFxcYGxsDHd3dxw9erTK8keOHIG7uzuMjY3RunVrfPbZZ/VU09oLCwtDly5dYG5ujubNm2P48OG4cOFCleccPnwYMpms3Ou3336rp1rXzsKFC8vV2c7OrspzGuI9LePs7FzhfZo6dWqF5RvSff3pp58wZMgQODg4QCaTYdeuXSrvCyGwcOFCODg4wMTEBH369MH58+erve727dvRsWNHKJVKdOzYETt37qyjFqinqvYWFRXh3XffRadOnWBmZgYHBweMGzcON2/erPKaGzZsqPB+5+fn13FrqlbdvQ0MDCxX5+7du1d7XV28t9W1taL7I5PJ8OGHH1Z6TV29r3WJAUjDYmJiEBISgjlz5iAxMRFeXl7w9fVFWlpaheVTU1MxcOBAeHl5ITExEf/5z38QHByM7du313PN1XPkyBFMnToVJ06cQGxsLIqLi+Ht7Y379+9Xe+6FCxeQnp4uvdq2bVsPNX4yzz77rEqdz549W2nZhnpPy8THx6u0NTY2FgDwr3/9q8rzGsJ9vX//Ptzc3LB27doK3//ggw+wcuVKrF27FvHx8bCzs8PLL78sPR+wIj///DP8/Pzg7++PM2fOwN/fHyNHjsTJkyfrqhk1VlV7Hzx4gNOnT2PevHk4ffo0duzYgYsXL2Lo0KHVXtfCwkLlXqenp8PY2LgumlBj1d1bABgwYIBKnffs2VPlNXX13lbX1sfvTWRkJGQyGV577bUqr6uL97VOCdKorl27iilTpqgca9++vXjvvfcqLD979mzRvn17lWNvvPGG6N69e53VsS5kZmYKAOLIkSOVljl06JAAIO7evVt/FdOABQsWCDc3txqXbyz3tMyMGTPE008/LUpLSyt8v6HeVwBi586d0s+lpaXCzs5OLF++XDqWn58vLC0txWeffVbpdUaOHCkGDBigcszHx0eMGjVK43V+Eo+3tyK/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",
+ "text/plain": [
+ "