Adaptive signal control technology (ASCT) is a system that dynamically and automatically adjusts signal timing parameters in real-time to optimize traffic operations of a corridor.## We develop a stochastic model to ascertain the mobility effect of the ASCT on travel time reliability (TTR).

## TTR performance metrics based on the measure of variations (coefficient of variation) and index-based measures (buffer index, planning time index, and misery index) were used in the analysis.

## The stochastic model proposed is based on Bayesian additive regression, which its parameters are specified as distributions.

Travel time data of a 3.3-mile corridor on Mayport highway in Jacksonville, Florida was used as the case study.

### We introduce a novel statistical model for quantifying the mobility benefit of ASCT in terms of TTR

### The analysis is based on a Bayesian additive regression model with a change-point assumption to calibrate the travel time with and without the ASCT system

### Markov Chain Monte Carlo simulations implemented in pymc3, a python package, were used to calibrate the posterior distributions

### Data are collected at 5 min interval

### The general trend of the speed-time series reveals that there are fluctuations in daily data

### A sinusoidal function based on a Fourier Series can accurately approximate this pattern

\[ y_{t} \sim N(\mu_{t}, \sigma^2)\] \[ \mu_{t} = f_1(x_{t}) \text { if } t \leq \tau\] \[ \mu_{t} = f_2(x_{t}) \text { if } t > \tau\]

\[ f_1(x_{t}) = \beta_{10}+\sum_{n=1}^{N}\beta_{1n}cos(n\omega_{1n}x_{t}+\phi_{1n})\] \[ f_2(x_{t}) = \beta_{20}+\sum_{n=1}^{N}\beta_{2n}cos(n\omega_{2n}x_{t}+\phi_{2n})\]

```
with pm.Model() as Fourier_series_model:
amp_with_0 = pm.Normal("amp_with_0", mu=0, sd=10)
amp_with_1 = pm.Normal("amp_with_1", mu=0, sd=10)
amp_withou_0 = pm.Normal("amp_withou_0", mu=0, sd=10)
amp_withou_1 = pm.Normal("amp_withou_1", mu=0, sd=10)
phi_with_0 = pm.Gamma("phi_with_0", 1, 1)
phi_with_1 = pm.Gamma('phi_with_1', 1, 1)
phi_withou_0 = pm.Gamma("phi_withou_0", 1, 1)
phi_withou_1 = pm.Gamma('phi_withou_1', 1, 1)
phase_with_0 = pm.Uniform('phase_with_0', -np.pi/2, np.pi/2)
phase_with_1 = pm.Uniform('phase_with_1', -np.pi/2, np.pi/2)
phase_withou_0 = pm.Uniform('phase_withou_0', -np.pi/2, np.pi/2)
phase_withou_1 = pm.Uniform('phase_withou_1', -np.pi/2, np.pi/2)
Î²0 = pm.Normal("Î²0", mu=0, sd=10)
Î±0 = pm.Normal("Î±0", mu=0, sd=5)
Ïƒ_1 = pm.HalfNormal('Ïƒ_1', sd=0.5)
Ïƒ_2 = pm.HalfNormal('Ïƒ_2', sd=0.5)
Î¼11 = (amp_with_0 * T.cos(1 * phi_with_0 * tt + phase_with_0) +
amp_with_1 * T.cos(2 * phi_with_1 * tt + phase_with_1)
)
Î¼12 = (amp_withou_0 * T.cos(1 * phi_withou_0 * tt + phase_withou_0) +
amp_withou_1 * T.cos(2 * phi_withou_1 * tt + phase_withou_1)
)
mu_1 = Î±0 + Î¼11
mu_2 = Î²0 + Î¼12
tau = pm.DiscreteUniform('tau', lower=0, upper = tt.max())
sd = pm.math.switch(tau > tt, Ïƒ_1, Ïƒ_2)
Î¼ = pm.math.switch(tau > tt, mu_1, mu_2)
# likelihood and sampling
observation = pm.Normal('observation', mu= Î¼, sd= sd, observed=Y)
```

### Graphical displays of actual and predicted samples (ref)

### For a good model, predicted and actual data should look the same

\[ p(y^{pred}|y) = \int p(y^{pred}|\theta, y)p(\theta|y)d\theta\]

```
with Fourier_series_model:
pred_samples = pm.sample_posterior_predictive(trace, samples=1000)
```