Traffic Forecast using Python | Time Series Analysis | FbProphet | Machine Learning Tutorial
Published: 2024-02-02 13:27:02

**Traffic Forecast using Python | Time Series Analysis | FbProphet | Machine Learning Tutorial**

Traffic forecast prediction is a task of predicting traffic volumes, utilizing historical speed and volume data with the help of Time Series Analysis in python. Traffic forecasting is an integral part of the process of designing of road facilities, starting from investment feasibility study to developing of working documentation. You can also apply the Time Series Analysis for stock market, product sales, item demands, etc.
traffic forecast time series analysis using python
Traffic Forecast - Time Series Analysis

In this tutorial, we will load and analyze the data set from a transport company, preprocess the data and apply a prediction model to forecast the traffic and visualize through graphs.


Dataset Information

Investors are considering making an investment in a new form of transportation - JetRail. JetRail uses Jet propulsion technology to run rails and move people at a high speed! While Jet-Rail has mastered the technology and they hold the patent for their product, the investment would only make sense, if they can get more than 1 Million monthly users within the next 18 months.

You need to help Unicorn ventures with the decision. They usually invest in B2C start-ups less than 4 years old looking for pre-series A funding. In order to help Unicorn Ventures in their decision, you need to forecast the traffic on JetRail for the next 7 months.

Download the Dataset [Data](https://github.com/aswintechguy/Machine-Learning-Projects/blob/master/Traffic%20Forecast%20-%20Time%20Series%20Analysis/Traffic%20data.csv)



Import Modules

Let us import all the basic modules we will be needing for this project.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
from fbprophet import Prophet

    pandas - used to perform data manipulation and analysis

    numpy - used to perform a wide variety of mathematical operations on arrays

    matplotlib - used for data visualization and graphical plotting

    %matplotlib - to enable the inline plotting.

    warnings - to manipulate warnings details

    filterwarnings('ignore') is to ignore the warnings thrown by the modules (gives clean results)

    Prophet - Module to use the Time Series Analysis API

    You must install fbprophet in order to import correctly



Loading the Dataset

df = pd.read_csv('Traffic data.csv')
df.head()

    Here, we display the first five data from the data set

    The Id is not necessary for this tutorial so it can be left out for faster processing


df

traffic forecast dataset for timeseries


Traffic Forecast Dataset

    This is the display of the whole data, partially returned for viewing purposes

    The data is composed of three years of collected data (2012-2014)



Preprocessing the dataset

# check null values
df.isnull().sum()

    As we see, there are no null values present in the data set, which is good and makes the process easier

    In case the data set contains at least one null value you must replace it using imputation techniques so it doesn't affect the results

df.info()

    Datetime is a column we want to convert so we need to see the data type to know how to process it



# convert object to datetime datatype
df['Datetime'] = pd.to_datetime(df['Datetime'], format='%d-%m-%Y %H:%M')
df.info()


    Now we converted the Datetime column from an object to a proper datetime attribute


# EDA
plt.figure(figsize=(10,7))
plt.plot(df['Datetime'], df['Count'])
plt.show()

visualization of past traffic data with datetime
Visualization of past traffic data

    Visualization of the growth of traffic in the specific datetime range collected


Format data for the model

df.index = df['Datetime']
df['y'] = df['Count']
df.drop(columns=['ID', 'Datetime', 'Count'], axis=1, inplace=True)
df = df.resample('D').sum()
df.head()

    This process combines all the data set with the same date summing the count



df['ds'] = df.index
df.head()

    Defining the input data as 'ds' and the output data as 'y'



Input Split

size = 60
from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=size/len(df), shuffle=False)

train.tail()

    test_size=size/len(df) - gives a certain percentage

    shuffle=False - To ensure that the data is not shuffled

test.head()

    Display of the first five data samples in the test data


test.tail()

    Display of the last five data samples from the test data


Model Training

model = Prophet(yearly_seasonality=True, seasonality_prior_scale=0.9)
model.fit(train)

    Initialization of Prophet model with yearly seasonality as a parameter


future = model.make_future_dataframe(periods=60)
future