Yesterday, NaytaData (aka @NaytaData ) posted a nice graph on reddit, with bicycle traffic and mean air temperature, in Helsinki, Finland, per day,

I found that graph interesting, so I did ask for the data (NaytaData kindly sent them to me tonight).

df=read.csv("cyclistsTempHKI.csv") library(ggplot2) ggplot(df, aes(meanTemp, cyclists)) + geom_point() + geom_smooth(span = 0.3) |

But as mentioned by someone on twitter, the interpretation is somehow trivial : people get out on their bike when the weather is nice. The hotter, the more cyclists on the road. Which is interpreted here in a causal way…

But actually, we can also visualize the data as follows, as suggested by Antoine Chambert-Loir

ggplot(df, aes(cyclists, meanTemp)) + geom_point() + geom_smooth(span = 0.3) |

The interpretation would be, somehow, that the more cyclists on the road, the hotter it is. Why not consider this causal interpretation here ? Like cyclists go so fast, or sweat so much, that they increase temperature…

Of course, it is the standard (recurrent) discussion “correlation is not causality”, but in regression models, we like to tell a story, to pretend that we have some sort of a causal story. But we do not prove it. Here, we know that the first one is more credible than the second one, but how do we know that ? To go further, how can we use machine learning techniques to prove causal relationships ? How could a machine choose between the first and the second story ?

Well posted set of questions Arthur. For an agnostic causality proof a ML system would need to solve for 1) directionality (of causal order) 2) dimensionality of covariantes 3) logic truth.

For 1) the ML system should sample a=1…n scenarios with x= Variance of cyclists starting times as predictor feature regressed over y= Variance of Temperature at x (as well as x+1 ; x-1 …) as target feature. As this is a tensor of brutal force model comparisons it would fit in well with ML applications and positively would solve for directionality issue of causality (I.e. It is x preceeding y or vice versa). In this sense ‘research designs’ would apply panel methods to solve for directionality of causal models.

For 2) and that’s interesting indeed as you might work out some data analitics on these data: “single variable” causality is a unicorn 🦄…..The coexistence of billion…infinite interactive covariates as !causal complex! is what Nature is teaching since we were monkeys….so I suggest here a stupid approximation by ANCOVA in R

DV=N of daily cyclisists

Factor=daily temperature

[level 1=-20:-10 ; level 2=-10:-5 ; level 3=-5:0 …etc]

Covariates=traffic, age, gender, seasonality, week day etc…

## the results should uncover the actual effect of number of ciclista 🚴 Reducing (covarying out of the model) the effect of several other key features …

Note: Partial (or semipartial) correlation models apply as well in this case to understand what mediator variables are present “between” cyclists and temperature.

For 3)

x -> y [for any x ‘increase temperature’ it is always an increase of y ‘🚵’ in Helsinki]

is logically true if

¬y -> ¬x [which is clearly false…]

Overall 1), 2) and 3) are implementable in a ML application to generalize (always tentatively!) causal order solutions by numerical/logical approximation and keeping the ML system as an agnostic model.

PS the real info hidden in your graph is the “heteroscedasticity”. Suffice to say that for non linear models like the one picked up by your graph a profit or logic function would give abnormal standard errors with biased MLE … also heteroscedasticity would be revealing presence of non-homogeneous sub-populations in the sample and thus ….other features would most likely be necessary to disentangle causality of the model .

In a trivial way: of course a machine can’t.

In a modellers way: add rain and wind and see your model getting better, while temperature is influenced by rain and wind a lot less.

In a machine learning 2025 way: it looks up the wiki on Human Power and acknowledges that 20k cyclists dissipate the heat of only a few hundred cars.