Smart traffic solutions are becoming increasingly important and they play vital role in making our cities (and infrastructure) smarter. They comprise of multiple parts, spanning from hardware, software, and in recent years also AI/ML.
With predictions of utilization (and potential congestion) of particular segments on (road) infrastructure it is possible to better optimize routes taken thus cut time necessary to transport goods, people etc.
Value derived from such capability can be estimated with proxy indicators such as time of people saved, or expenses on fuel consumed etc.
|Business objective:||Cut time required to deliver goods in certain area|
|Business value:||Higher utilization of vans (measured by goods delivered in given time-frame); Shorter time of delivery|
import logging import pandas as pd import plotly as plt import plotly.express as px import plotly.graph_objects as go import numpy as np import json import datetime import copy import math import tim_client
Credentials and logging
(Do not forget to fill in your credentials in the credentials.json file)
with open('credentials.json') as f: credentials_json = json.load(f) # loading the credentials from credentials.json TIM_URL = 'https://timws.tangent.works/v4/api' # URL to which the requests are sent SAVE_JSON = False # if True - JSON requests and responses are saved to JSON_SAVING_FOLDER JSON_SAVING_FOLDER = 'logs/' # folder where the requests and responses are stored LOGGING_LEVEL = 'INFO'
level = logging.getLevelName(LOGGING_LEVEL) logging.basicConfig(level=level, format='[%(levelname)s] %(asctime)s - %(name)s:%(funcName)s:%(lineno)s - %(message)s') logger = logging.getLogger(__name__)
credentials = tim_client.Credentials(credentials_json['license_key'], credentials_json['email'], credentials_json['password'], tim_url=TIM_URL) api_client = tim_client.ApiClient(credentials) api_client.save_json = SAVE_JSON api_client.json_saving_folder_path = JSON_SAVING_FOLDER
[INFO] 2021-01-15 11:56:53,486 - tim_client.api_client:save_json:66 - Saving JSONs functionality has been disabled [INFO] 2021-01-15 11:56:53,489 - tim_client.api_client:json_saving_folder_path:75 - JSON destination folder changed to logs
Dataset is a combination of two (original) datasets:
It was enhanced with holidays information relevant for given timestamps as well.
Loop sensor data was collected for the Glendale on ramp for the 101 North freeway in Los Angeles, US. It is close enough to the stadium to see unusual traffic after a Dodgers game, but not so close and heavily used by game traffic.
Data are sampled on 5-minutes basis and can contain gaps.
|volume||Number of cars measured for the previous five minutes||Target||t-1|
|event||Binary value indicating whether match was played at nearby stadium||Predictor||t+6|
Our goal is to predict next 30 minutes of traffic.
CSV file used in experiment can be downloaded here.
data = tim_client.load_dataset_from_csv_file('data.csv', sep=',')
We can see that last 6 data points are NaN i.e. are missing in dataset because we want to back-test predictions of the next 30 minutes (5 min x 6 = 30 min.)
Zoom in closer to see events (red) lines in chart below.
data_for_chart_event = data['Event'].apply( lambda x: None if x==0 else x )*40
fig = plt.subplots.make_subplots(rows=1, cols=1, shared_xaxes=True, vertical_spacing=0.02) fig.add_trace(go.Scatter(x = data.loc[:, "TS"], y=data.loc[:, "Volume"], name = "Volume", line=dict(color='blue')), row=1, col=1) fig.add_trace(go.Scatter(x = data.loc[:, "TS"], y=data_for_chart_event, name = "Event", line=dict(color='red')), row=1, col=1) fig.update_layout(height=500, width=1000) fig.show()