Analysis report

Electricity Demand and Temperature

Target
Demand
Rows
2184
Columns
4
Analyzed
2026-10-31 11:01 UTC

Summary

The model predicts Demand and explains 88% of the variation in Demand, relying most strongly on Temperature. Moving Temperature from 5.90 to 22.1 raises the model's output by about 2.08 on average, with everything else as observed. Compared with a straight line through the data, the model explained an additional 83 points of variance explained on the held-out rows, and showed a large effect size.

The model captures most of the pattern, but its quality drops on rows with Weekday equal to Sunday, where it explains only 69% of the variation, far less than overall. The formula is short but built from functions that take a specialist to read. The model's errors differ between Weekday groups. Validate on a fresh sample before relying on the model for decisions.

Formula

Demand = 121 + (1 when Weekday ∈ {"Friday", "Tuesday", "Wednesday"}) − 52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) + 50.6 × exp(-0.0042 × (Temperature − 38.4)^2)Demand=121+Weekday∈{Friday,Tuesday,Wednesday}−52×exp−0.0026×Temperature−182+Year−20192+50.6×exp−0.0042×Temperature−38.42
Demand = 121 + (1 when Weekday ∈ {"Friday", "Tuesday", "Wednesday"}) − 52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) + 50.6 × exp(-0.0042 × (Temperature − 38.4)^2)
4 terms · additively decomposable

Held-out diagnostics

TargetQualityErrorR²MAESearch rowsGeneralizationRows
Demand87.03%12.21%0.87793.4881747generalizing437
  • Demand · Quality 95% CI 84.81% – 88.75%
  • Demand · Error 95% CI 10.59% – 14.3%
  • Demand · R² 95% CI 0.857 – 0.8941
  • Demand · MAE 95% CI 3.27 – 3.73

Concerns

WARNING implications

Much weaker quality on rows with `Weekday` = `Sunday`

The model's typical miss on this segment is 1.56 times its typical miss on all held-out rows, on 51 rows. The model is noticeably weaker on these rows; predictions for them deserve caution.

Analysis

The report opens with the Headline and the Concerns, followed by the Discovered Relations when the analysis has targets and by Questions & Answers when questions were asked. Three sections carry the detail: Model presents one model per target, Implications states where the models hold and what to weigh before relying on them, and Data describes the table as supplied, column by column, for reference.

Generated 2026-10-31 11:01 UTC, analysis 62d6db30-d51a-11f1-9069-eb4c89cc8d4f, 1 target, time budget 4 h 0 min, compute budget 4,000 credits, 2,184 rows. The Provenance & Audit chapter holds the full record.

Validity

Validity: valid. Nothing in the data or the formula speaks against relying on this result.

How to read this

Whether this result is one to rely on. Quality says how closely the formula follows the data; validity says whether that closeness means anything. A formula that only restates its target, or that reads a column which already holds the answer, can reach a high quality and still say nothing new about the data.

What it found

Demand starts from a base of 121, rises with Year, and is lowest at a middle value of Temperature.

  1. Temperature carries most of the model for Demand. Temperature accounts for 98.9% of what the formula explains and Weekday for 0.7%. Year adds 0.4%.
  2. Demand is lowest at a middle value of Temperature. With the other inputs at typical values, the formula gives 76.5 at Temperature 13.6, against 118 at -15 and 127 at 30.7.
  3. Weekday accounts for 6.1% of the spread in Demand. Wednesday averages 7.93 above Sunday (95% interval 6.08 to 9.79).
  4. The formula is ahead of a straight line for Demand. The formula explains 88% of Demand; a straight line explains 4.8%. That was measured on 437 rows it never saw. The formula typically misses Demand by 3.49. It is weakest where Weekday is Sunday, where it explains 69%.

Summary

What to do next: 1 column compared, 1 flagged: Weekday (a group is systematically over- or under-predicted).

6 chapters, each headed by what it found.

S.1 Temperature carries the whole formula

What the formula relies on.

Measured on 174 of the 1,747 rows the model was found on, which the search set apart for it. With Temperature the model's output rises on 414 and falls on 461 of the 875 measured rows (exact derivative). The model's output rises with Year on every one of the 2,190 steps between observed values. Moving Temperature from 5.90 to 22.1, its first and third quartile, with every other input as observed raises the model's output by 2.08 on average (by between 1.74 and 2.64 on single rows). These are measurements on the rows the search trained on, inside the observed ranges; outside them nothing is claimed.

Table 5.1.3
InputShare of importancePermutation importanceSensitivityResidual correlationOccurrencesModel's output as the input risesChange, first to third quartile
Temperature98.93%13.43852.27-0.046181Rises and falls (rises on 414, falls on 461 of 875 rows)+2.076 (5.9 to 22.1)
Weekday0.66%0.08931
Year0.42%0.05650.476-0.093811Rises (2190 of 2190 steps)+1.569 (2020 to 2023)
Rows the search trained on, measured
875
N rows
174

Read as a sum, the formula has 4 additive terms: 3 that read an input and a constant base. Two of those that read an input carry 99.8% of the variation of the model's output on the 875 rows the search trained on: 50.6 × exp(-0.0042 × (Temperature − 38.4)^2) (53%) and -52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) (47%). A share describes the model's output, not the target. Each curve below shows one term's response to its free inputs, with the other inputs held at the training median.

Additive
Yes
Rows the search trained on, measured
875
Terms in the formula
4
Notation
121 + (1 when Weekday ∈ {"Friday", "Tuesday", "Wednesday"}) − 52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) + 50.6 × exp(-0.0042 × (Temperature − 38.4)^2)
Target
Demand

S.2 It holds on new rows: R² 0.88 held out, 0.86 on the training rows

How well it holds. The formula explains 88% of Demand; a straight line explains 4.8%.

How this was checked

  • Measured on 437 rows the formula never saw (20% of 2,184); the other 1,747 built it.
  • Compared on the same rows against always guessing the average, always guessing the median and a straight line.
  • Intervals from 1,000 bootstrap resamples of those rows.

R² of 0.878 on 437 rows the search never saw (95% interval 0.857 to 0.894): good. The model captures most of the variation on these rows; individual predictions still carry uncertainty; the Prediction Interval Coverage chapter shows how wide it is. Mean absolute error is 3.49 on the target's scale.

Error
12.21% (95% CI 10.59% – 14.3%)
MAE
3.488 (95% CI 3.27 – 3.73)
N
437
Training rows
1747
Quality
87.03% (95% CI 84.81% – 88.75%)
R²
0.8779 (95% CI 0.857 – 0.8941)
Rows found on
1747
Target
Demand

The model beats the strongest simple yardstick, a straight line through the data, by 83 points of variance explained on the 437 held-out rows. Row by row the margin is large: the model captures structure no simple yardstick matches. Of the 437 held-out rows where the two differ, the model is closer on 82% (95% interval 78% to 85%).

Best yardstick's score
0.04802 (95% CI 0.01258 – 0.0773)
Best baseline R²
0.04802
Effect size d
0.948 (95% CI 0.8578 – 1.052)
Effect size d magnitude
large
Margin over the best yardstick
0.8299 (95% CI 0.7969 – 0.8678)
Margin's interval stays above zero
Yes
Model MAE
3.488 (95% CI 3.27 – 3.73)
Model
0.8779 (95% CI 0.857 – 0.8941)
Model R²
0.8779 (95% CI 0.857 – 0.8941)
Held-out rows
437
Held-out rows without an answer
0
Target
Demand
Rows where the model is closer
82.15% (95% CI 78.29% – 85.46%)
Rows compared
437
Rows level
0
Regression yardstick trained with gaps filled (too few complete rows)
No
Training rows of the regression yardstick
1747

The model explains held-out rows about as well as training rows (held-out R² 0.878 on 437 rows, gap between training and held-out R² -0.0183): it generalizes. The structure the formula encodes carries from the training rows to the held-out rows.

Generalization gap
-0.01829
N test
437
Target
Demand
Test error
3.488 (95% CI 3.27 – 3.73)
Test R²
0.8779 (95% CI 0.857 – 0.8941)
Train error
0.1318
Train R²
0.8596
Verdict
Generalizing

S.3 Weaker in Weekday = Sunday

Where it is weak. The largest miss on a held-out row is 13.4 (recorded 66, predicted 79.5).

Segment weekday = Sunday is much weaker than the aggregate (51 held-out rows): segment R² 0.687 against aggregate R² 0.878 (gap -0.191). A drop this large means the model describes this slice of the data poorly; an input interaction or a missing column may be specific to this subset.

Table 7.3.1
SegmentRowsR²Gap to all rowsVerdict
Weekday = Sunday510.6871-0.19084Much weaker than on all rows
Weekday = Thursday660.8508-0.02713In line with all rows
Weekday = Saturday590.8617-0.01623In line with all rows
Temperature = q41160.7500-0.12788In line with all rows
Temperature = q21150.3763-0.50156In line with all rows
Year = q21630.8732-0.00471In line with all rows
Temperature = q11030.6966-0.18130In line with all rows
Year = q41340.8701-0.00785In line with all rows
Year = q3690.8925+0.01464In line with all rows
Year = q1710.8568-0.02110In line with all rows

The first 10 rows of 15. The other 5 are in the notebook.

Aggregate MAE
3.488
Aggregate R²
0.8779
Measure
r2
Target
Demand

The worst held-out row was missed by 13.4 (target's scale). The 10 rows with the largest absolute residuals out of 437 held-out rows are shown. Each card breaks the failure down into per-term contributions and input values, so the failure mode is inspectable. A large residual with one concentrated term contribution means one term got this row wrong; a large residual with balanced contributions means a structural mismatch.

Table 5.1.13
ActualPredictedResidualTemperatureWeekdayYear
66.0579.49-13.4418.9Sunday2020
103.98116.57-12.5928.7Sunday2020
73.4385.54-12.116.2Saturday2020
118.48106.82+11.6625.9Tuesday2024
65.7577.38-11.6317.6Saturday2020
74.8685.53-10.676.7Friday2020
106.43117.08-10.6528.6Friday2020
69.1979.69-10.509.4Sunday2020
106.3696.13+10.2324.2Thursday2021
68.9578.52-9.5710.2Sunday2020
Additive
Yes
Expected coverage
0.8959
N extrapolated
0
Held-out rows
437
Held-out rows for the interval
437
Rows inside the interval
398
Residual P5
-7.214
Residual P95
6.79
Residual std
4.333

0 of 437 held-out rows (0%) lie further from the training rows than 99 in 100 rows like them would, measured on the 2 inputs the model reads (temperature, year). That is a small minority; the held-out figures describe the model on rows like the ones it was trained on.

Table 7.4
TargetInputs measuredLineHeld-out rowsBeyond the lineShare
DemandTemperature, Year3.03543700%
Table 7.4 · Score bins · 24 of 30 rows shown
CountFromTo
000.121
00.1210.243
190.2430.364
100.3640.486
80.4860.607
90.6070.728
70.7280.85
530.850.971
370.9711.093
311.0931.214

The first 10 rows of 24. The other 14 are in the notebook.

S.4 Usable with care: 1 point to watch

What to watch. First: Much weaker quality on rows with Weekday = Sunday.

Table 2
SeveritySectionConcernDetail
WarningImplicationsMuch weaker quality on rows with Weekday = SundayThe model's typical miss on this segment is 1.56 times its typical miss on all held-out rows, on 51 rows. The model is noticeably weaker on these rows; predictions for them deserve caution.

The analysis ran with the configuration below. The checks and the verdict of this chapter are read against it.

  • Targets: 1 target: demand
  • Rows: 2,184 rows
  • Per-Segment Predictions: not produced, because no segment column was chosen
  • Fairness: compared across 1 categorical column (weekday); which of them are protected attributes is not decided here
  • Out-of-Distribution: held-out rows are scored against the training rows; predictions made outside this report are not scored
  • Provenance & Audit: recorded in the chapter of that name

Across 6 checks (5 pass, 1 warns, 0 fail), the model passes the hard gates but at least one check warns: Usable with care. A limited audience and monitoring of the warning signals come before a broad rollout.

Table 7.7
NameStatusDetail
GeneralizationPassquality on the held-out rows matches quality on the rows the model was found on
Prediction Interval CoveragePasscoverage matches the interval level, largest gap 2.40 percentage points
Baseline Lift for DemandPassbeats the best baseline, R² lift 0.83
Model ConstraintsPassevery held-out prediction is finite and within the training range
FairnessWarn1 column compared, 1 flagged: Weekday (a group is systematically over- or under-predicted)
Out-of-DistributionPass0% of held-out rows are out of distribution
N critical concerns
0
N fail
0
N pass
5
N warn
1
Overall verdict
Caution

Column Weekday splits the held-out rows into 7 groups. The prediction-parity ratio is 0.96 (smallest over largest mean prediction), the largest absolute group residual mean is 5.14 (1.19 times the overall residual standard deviation). Residual bias: at least one group is systematically over- or under-predicted. The model's errors are not zero-mean across groups; its predictions for the affected groups deserve caution.

Aggregate residual std
4.333
N columns
1
N proxies
0
Proxy threshold
0.5
Table 7.5.1 · Columns
Bias max abs residual meanColumnGroupsInterpretationN groupsPrediction parity ratioVerdict
5.14WeekdayThursday, Monday, Wednesday, Tuesday, Friday, Saturday, SundayColumn Weekday splits the held-out rows into 7 groups. The prediction-parity ratio is 0.96 (smallest over largest mean prediction), the largest absolute group residual mean is 5.14 (1.19 times the overall residual standard deviation). Residual bias: at least one group is systematically over- or under-predicted. The model's errors are not zero-mean across groups; its predictions for the affected groups deserve caution.70.96Residual bias

S.5 More rows in Weekday = Sunday would help most

What to collect next. Its R² there is 0.69 against 0.88 on all rows, on 51 held-out rows.

  • Collect more rows where Weekday = Sunday. Reason: the model is far less accurate on the 51 held-out rows where Weekday = Sunday, explaining 69% of the variation there.
  • Inspect the model's predictions for the column Weekday. Reason: the model's errors differ between groups of Weekday.

S.6 It shows how Demand moves with its inputs in these rows, not what causes it

What this cannot tell you. It was built on Temperature from -15 to 30.7 and Year from 2019 to 2024; outside those ranges it has not been checked.

Diafunc found a formula that captures the structure in the training data. That structure is correlative: it states what predicts what in this data. It does not establish that any input causes the target.

A correlative model is the right tool for predicting the target on new rows like these, for exploring which inputs carry information about the target, and for an early-stage diagnostic or screening tool.

A correlative model is not the right tool for claiming that intervening on an input will change the target, for attributing a target's values to specific causes for accountability, or for choosing between policies that act on the inputs.

The Quality by Input Range, Fairness and Concerns chapters show the most common confounding patterns in the data.

The model is correlative: it captures which columns predict the target in the training data, not whether changing one would change the other. Predictions are reliable for inputs that look like the training distribution; they are not evidence that intervening on an input will change the target. The 4 upgrade pathways below show what evidence would support a causal claim.

Table 7.6 · Upgrade pathways
NameSummary
Controlled experimentRandomize the input to be acted on, then analyze again. Randomization breaks confounding, so any change in the target is attributable to the input.
Natural experimentFind a setting where the input varied for reasons unrelated to the target, an instrumental variable. Variation of that kind supports causal inference.
Causal graphWrite out what plausibly causes what, then check whether the model's terms are consistent with the conditional independences the graph implies.
Control for confoundersIf a third variable plausibly moves both the input and the target, stratify by it or condition on it before training again. Gaps in the Quality by Input Range chapter are a clue.

Evidence

Every chapter of the analysis in full: the figures the story rests on, and everything else the analysis measured.

1 Headline

Diafunc modeled Demand from 3 columns. The model explains 88% of the variation in Demand and relies most on Temperature, with which the model's output rises over part of the range and falls over another.

  • One target was modeled; 437 rows were held out for checking, with demand as the segment key.
  • A straight line through the data already explained 4.8%; the model added 83 points of variance explained, a large margin.
  • The model is far less accurate on the 51 held-out rows where Weekday is Sunday.
Best R²
0.8779
Best quality
87.03%
Best target
demand
Targets
1

2 Concerns

Table 2
SeveritySectionConcernDetail
WarningImplicationsMuch weaker quality on rows with Weekday = SundayThe model's typical miss on this segment is 1.56 times its typical miss on all held-out rows, on 51 rows. The model is noticeably weaker on these rows; predictions for them deserve caution.

How to read this

Data-quality, model-quality, and deployment-risk issues detected during the analysis appear below, ordered by severity. Critical concerns are listed first; Warning and Info entries follow.

3 Discovered Relations

Table 3 · Quality and error measured on the 437 held-out rows
TargetFormulaQualityComplexityError
DemandDemand = 121 + (1 when Weekday ∈ {"Friday", "Tuesday", "Wednesday"}) − 52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) + 50.6 × exp(-0.0042 × (Temperature − 38.4)^2)87.03%33.1%12.21%

How to read this

One model per target, each a formula with its quality, complexity and error. Higher quality at lower complexity describes the data most clearly. The findings below read the models together; the per-target chapters in the Model section carry each formula, its predictions and its diagnostics.

4 Questions & Answers

3 questions were asked with this analysis:

  • How does electricity demand change with the temperature?
  • At what temperature is demand lowest?
  • How much lower is demand on weekends?

How does electricity demand change with the temperature?

The model's output rises with Temperature from winter into summer, peaks, then falls: demand is lowest near 18°C and rises from there, with a 2.1-unit average increase from the first to third quartile of Temperature.

From Which inputs matter most (Demand) and How each term responds to its inputs (Demand).

At what temperature is demand lowest?

Demand is lowest at about 18°C: the main nonlinear term in the formula reaches its minimum when Temperature is 18, lowering the model's output by about 52 units at that point.

From How each term responds to its inputs (Demand) and Demand Model (Demand).

How much lower is demand on weekends?

Demand is about 1 unit lower on weekends: the model raises its output by 1 unit for Weekday in Friday, Tuesday, or Wednesday, and output is lowest on Sunday, Saturday, and Monday.

From Which inputs matter most (Demand) and How each term responds to its inputs (Demand).

N answered
3
N questions
3

5 Model

Temperature is by far the strongest input for predicting demand. The model's output tracks the training signal closely, with share of variation explained at 0.878 and average error for held-out rows at 3.49.

Most notable in the Model section:

  • Temperature carries most of the model (98.9% of its reliance on inputs)

How to read this

The Model section presents one model per target: its formula, its predictions on held-out rows, the inputs it relies on, the baselines it is measured against, and diagnostics of how it behaves. With more than one target, the Composite Model, Multi-Output and Leaderboard chapters read the models as a set.

5.1 Demand

The Model section builds one model for Demand: a formula that expresses it through the other columns. Diafunc searches the space of mathematical expressions for the formula that balances accuracy against simplicity, so the result is not a black box but an expression that can be read, evaluated and questioned. The chapters that follow show the formula, score it on rows it never saw during training, and take it apart term by term.

5.1.1 Demand Model

The model's output depends on the range of Temperature, rises when Year rises, and is slightly higher on Friday, Tuesday, and Wednesday.

Demand = 121 + (1 when Weekday ∈ {"Friday", "Tuesday", "Wednesday"}) − 52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) + 50.6 × exp(-0.0042 × (Temperature − 38.4)^2)f:(Temperature,Weekday,Year)↦DemandTemperature,Year,Demand∈RWeekday∈TDemand=121+Weekday∈{Friday,Tuesday,Wednesday}−52×exp−0.0026×Temperature−182+Year−20192+50.6×exp−0.0042×Temperature−38.42
Demand = 121 + (1 when Weekday ∈ {"Friday", "Tuesday", "Wednesday"}) − 52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) + 50.6 × exp(-0.0042 × (Temperature − 38.4)^2)
Quality 87.03% · Error 12.21% on 437 rows the search never saw · Found on 1747 rows · Complexity 33.1%
Table 5.1.1 · Constants of the formula
ValueRoleInputUnit
121InterceptUnit of the model's output
-52Coefficient
-0.0026Coefficient
18ShiftTemperatureUnit of Temperature
2019ShiftYearUnit of Year
50.6Coefficient
-0.0042Coefficient
38.4ShiftTemperatureUnit of Temperature
Share of the output's variation they carry
99.82%
Rows the search trained on, measured
875
Rows the search trained on
875
Held out R²
0.8779 (95% CI 0.857 – 0.8941)
Constant base
121
Constants in the formula
8
Terms that reach 95% of the output's variation
2
Terms that read an input, constants multiplied in
3
Training rows
1747
Held-out rows
437
Inputs the formula reads
3
Terms in the formula
4

How to read this

The three gauges score the model on the held-out rows: rows that were set aside before the search and that the model never saw. They are the figures to quote for how the model does on new data.

Table 5.1.1
MetricMeaning
QualityHow well the model predicts on the held-out rows, marked down for the size of its formula: 100% is an exact prediction, 0% is no better than always predicting the average. It is not R², and sits at or just below it
ErrorHow far the predictions lie from the held-out values, as a share of the miss of always predicting the average: 0% is an exact prediction, 100% is no better than the average
ComplexityThe size of the formula as a share of the complexity the search was allowed: a low figure is a short formula

The figures under During the search are the same measures on the training rows. They are what the search ranked its candidates by, so they describe the search and tend to flatter the model it chose. The Generalization chapter sets the training rows beside the held-out rows, and the Baselines chapter sets the model beside its baselines. The time and credit gauges account for the computation that produced the model, not for the model itself.

5.1.2 Prediction

The model predicts Demand for any row that supplies the other columns. This chapter applies it to the held-out rows, the rows set aside before training, so that the predictions can be compared with values the model never saw. The rows themselves and the function that predicts them are kept as reference under Foundation, with the processed data.

5.1.2.1 Prediction Chart

R² of 0.878 on 437 rows the search never saw (95% interval 0.857 to 0.894): good. The model captures most of the variation on these rows; individual predictions still carry uncertainty; the Prediction Interval Coverage chapter shows how wide it is. Mean absolute error is 3.49 on the target's scale.

Error
12.21% (95% CI 10.59% – 14.3%)
MAE
3.488 (95% CI 3.27 – 3.73)
N
437
Training rows
1747
Quality
87.03% (95% CI 84.81% – 88.75%)
R²
0.8779 (95% CI 0.857 – 0.8941)
Rows found on
1747
Target
Demand

How to read this

Actual Demand on the horizontal axis against the model's predicted value on the vertical axis, for the held-out rows the model never saw during training. Points on the diagonal are perfect predictions; systematic vertical offsets reveal bias, vertical spread reveals noise, and points far from the diagonal are rows the model handles poorly. With 10,000 held-out rows or more, the rows are counted instead of drawn one point each: each cell is a range of the actual and a range of the predicted value, its color the number of rows that fall in both, and the cells whose two ranges match hold the rows the model predicts well.

5.1.2.2 Residual Distribution
Bias
0.3087 (95% CI -0.1043 – 0.6795)
N
437
P50
0.6106 (95% CI 0.132 – 1.152)
P90
5.372 (95% CI 5.077 – 5.897)
P95
6.79 (95% CI 5.988 – 7.344)
P99
8.573 (95% CI 7.824 – 9.986)
Std
4.333 (95% CI 4.052 – 4.62)

How to read this

How the held-out residuals (actual Demand minus predicted) are distributed. Bias is their mean: a value away from zero means the model is systematically high or low rather than merely imprecise. The standard deviation and the percentiles describe the spread, and the tail percentiles say how large the worst misses get. Every figure carries a bootstrap 95% confidence interval; with a small held-out set those intervals are wide, and that width is itself the finding.

5.1.3 Which inputs matter most

Measured on 174 of the 1,747 rows the model was found on, which the search set apart for it. With Temperature the model's output rises on 414 and falls on 461 of the 875 measured rows (exact derivative). The model's output rises with Year on every one of the 2,190 steps between observed values. Moving Temperature from 5.90 to 22.1, its first and third quartile, with every other input as observed raises the model's output by 2.08 on average (by between 1.74 and 2.64 on single rows). These are measurements on the rows the search trained on, inside the observed ranges; outside them nothing is claimed.

Table 5.1.3
InputShare of importancePermutation importanceSensitivityResidual correlationOccurrencesModel's output as the input risesChange, first to third quartile
Temperature98.93%13.43852.27-0.046181Rises and falls (rises on 414, falls on 461 of 875 rows)+2.076 (5.9 to 22.1)
Weekday0.66%0.08931
Year0.42%0.05650.476-0.093811Rises (2190 of 2190 steps)+1.569 (2020 to 2023)
Rows the search trained on, measured
875
N rows
174

How to read this

The chart ranks the inputs of the Demand model by permutation importance: how much the model's error rises when that input's values are shuffled across rows so that it carries no information. A longer bar means the model relies on the input more. The order says which columns the model reads most, and those are the columns where measurement quality and data collection matter most. A short bar marks an input the model barely uses, which is a fact about this model and not a verdict on the column. Importance describes the model's reliance and nothing more: an input can rank high because it stands in for something the data does not contain. Where the search measured it, an input also carries the direction in which the model's output moves as the input rises, counted on the rows the search trained on, and the change of the output when the input alone goes from its first to its third quartile; both describe the formula inside the observed range and say nothing about causes.

5.1.4 Baselines

The model beats the strongest simple yardstick, a straight line through the data, by 83 points of variance explained on the 437 held-out rows. Row by row the margin is large: the model captures structure no simple yardstick matches. Of the 437 held-out rows where the two differ, the model is closer on 82% (95% interval 78% to 85%).

Best yardstick's score
0.04802 (95% CI 0.01258 – 0.0773)
Best baseline R²
0.04802
Effect size d
0.948 (95% CI 0.8578 – 1.052)
Effect size d magnitude
large
Margin over the best yardstick
0.8299 (95% CI 0.7969 – 0.8678)
Margin's interval stays above zero
Yes
Model MAE
3.488 (95% CI 3.27 – 3.73)
Model
0.8779 (95% CI 0.857 – 0.8941)
Model R²
0.8779 (95% CI 0.857 – 0.8941)
Held-out rows
437
Held-out rows without an answer
0
Target
Demand
Rows where the model is closer
82.15% (95% CI 78.29% – 85.46%)
Rows compared
437
Rows level
0
Regression yardstick trained with gaps filled (too few complete rows)
No
Training rows of the regression yardstick
1747

How to read this

The table scores the model for Demand against simple yardsticks on the same held-out rows. A yardstick is a predictor simple enough to need no explanation: a constant (the average, the middle value, the most common class or level, the average count), a plain regression on the numeric inputs (a straight line, a logistic regression, a Poisson regression), and for a series over time a forecast from its own past (the last value, the value one season back, the recent trend extended). Which of them appear depends on what kind of column Demand is. They are yardsticks only: the analysis has one model, and it is the last row. A regression yardstick answers every row the model answers: where one of its numeric inputs is empty, it reads the average of that input over the training rows. Nothing is filled in for the model. A yardstick whose row is empty could not be scored, and the summary then says what the margin is measured against.

Read the columns from top to bottom. Each kind of target is scored by the measure it is judged on: R² and MAE for a continuous value, with MASE added for a series (below 1 means a typical miss is smaller than the series' usual step from one row to the next); accuracy and balanced accuracy for a yes/no value, with the Brier score where a probability is predicted; accuracy and macro F1 for a class; weighted kappa and the distance in levels for an ordered level; Poisson deviance and RMSE for a count. When the model clears every yardstick by a wide margin, its structure earns its place. When it is level with the regression yardstick, a plain regression describes the data as well. When it is level with the constant, the inputs carry no usable signal for Demand.

The margin over the best yardstick comes with an interval. When that interval includes zero, the lead is not settled on this many held-out rows. The share of rows on which the model is closer than the best yardstick is counted only on the rows where the two differ; for a yes/no value or a class these are the rows where the two disagree.

5.1.5 Generalization

The model explains held-out rows about as well as training rows (held-out R² 0.878 on 437 rows, gap between training and held-out R² -0.0183): it generalizes. The structure the formula encodes carries from the training rows to the held-out rows.

Generalization gap
-0.01829
N test
437
Target
Demand
Test error
3.488 (95% CI 3.27 – 3.73)
Test R²
0.8779 (95% CI 0.857 – 0.8941)
Train error
0.1318
Train R²
0.8596
Verdict
Generalizing

How to read this

The chart sets the score of the Demand model on the rows it trained on beside its score on the held-out rows it never saw, and the gap between the two bars is the finding. The score is the one that suits the target: R² for a quantity, balanced accuracy for a yes/no target, weighted kappa for ordered levels. The held-out figure carries a bootstrap 95% confidence interval, which says how far it could move with a different held-out draw; the training bar has none, because it is measured on the rows that shaped the model.

The verdict reads from the two figures. Generalizing: the held-out score is strong, or training and held-out agree closely; the structure the formula encodes carries to new rows. Overfit: training is far ahead of held-out and the held-out score is not strong on its own; the formula has absorbed noise from the training rows, and the training figure overstates what to expect on new data. Underfit or noisy: held-out is far ahead of training; this is not strength, it usually means an outlier or a flat region in the training rows that the held-out rows happen to avoid. Insufficient: fewer than 30 held-out rows and no strong held-out score, too little evidence for a negative verdict. A model that predicts the same value for every held-out row gets no verdict: there is nothing that could carry over. In every case the width of the held-out interval says how much weight the gap can bear.

5.1.6 How each term responds to its inputs

Read as a sum, the formula has 4 additive terms: 3 that read an input and a constant base. Two of those that read an input carry 99.8% of the variation of the model's output on the 875 rows the search trained on: 50.6 × exp(-0.0042 × (Temperature − 38.4)^2) (53%) and -52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) (47%). A share describes the model's output, not the target. Each curve below shows one term's response to its free inputs, with the other inputs held at the training median.

Additive
Yes
Rows the search trained on, measured
875
Terms in the formula
4
Notation
121 + (1 when Weekday ∈ {"Friday", "Tuesday", "Wednesday"}) − 52 × exp(-0.0026 × ((Temperature − 18)^2 + (Year − 2019)^2)) + 50.6 × exp(-0.0042 × (Temperature − 38.4)^2)
Target
Demand

How to read this

The formula for Demand is split into its additive terms, and each term is traced as one of its inputs moves across the training range while the other inputs stay at their medians. Each curve is therefore a profile of the term at the typical row, not an average over the data: it shows what the term contributes at every value of that input when everything else is ordinary.

A term that depends on several inputs gets one curve per input; a constant term gets none. Terms the formula subtracts are drawn with their sign, so a curve below zero pulls the prediction down. At any fixed row, the terms add up to the model's prediction. Where the search measured it, a term also carries its share of the variation of the model's output on the rows the search trained on; that is a share of what the formula returns, not of Demand itself. The notebook lets the reader trim each range to the central 95% of the input. When the formula has no additive structure, the chapter traces the whole formula as a single term along each of its inputs, and the Sensitivity chapter is the better read for how the inputs combine.

5.1.7 How the formula behaves outside the data

How the model behaves beyond the observed range of weekday could not be determined from the formula, so extrapolation there is not assessed. Extrapolate with caution.

Bounded at infinity
No
Rows the search trained on, measured
875
Inputs the formula reads
3
N singularities
0
Target
Demand
Table 5.1.7 · Limits at neg infinity
InputKind
WeekdayUnknown
TemperatureFinite
YearFinite
Table 5.1.7 · Limits at pos infinity
InputKind
WeekdayUnknown
TemperatureFinite
YearFinite

How to read this

The formula for Demand is read as a mathematical object, without data, to state how it behaves beyond the range it was trained on. A black box cannot answer that question; a formula can. For each input the chapter reports the limit as the input grows without bound in either direction (whether the formula diverges, settles to a finite value or oscillates, with the sign tracked exactly, so that a term like minus two times the cube of the input is reported as diverging downward on the right and upward on the left), whether the formula stays finite in every direction, and any singularity with its solved location: a division whose denominator reaches zero, a logarithm or square root whose argument leaves its domain, or a periodic pole.

The inputs along which the formula diverges or meets a singularity are listed as the risky ones; along them the formula's shape gives no support for extrapolation. A formula that stays finite everywhere with no singularity carries no structural hazard when extrapolated; the data still ends where it ends, and a prediction outside the training range remains unsupported by evidence. The plain-language summary at the end states the same facts in one paragraph.

5.1.8 Contributions per term
Additive
Yes
N rows
5

The notebook draws this chapter's figure from each held-out row; the row-by-row detail is there.

How to read this

For up to five representative held-out rows, the chapter draws one bar chart showing how each additive term of the formula builds that row's prediction of Demand. The five rows are the worst prediction (largest absolute residual), the best (smallest), the median miss, the row with the smallest prediction and the row with the largest. When two roles fall on the same row, which is common with few held-out rows, the earlier role keeps it and fewer than five charts appear.

In each chart the bars stack the terms' contributions at the row's input values, terms the formula subtracts sit below zero, and the bars sum to the prediction. The dashed line marks the actual value; the distance between it and the top of the stack is the residual. The bars are evaluated at the same precision as the predictions, so they agree with the Prediction Chart. When the formula has no additive structure, each chart holds one bar for the whole formula, and the Sensitivity chapter is the better read for how individual inputs move it.

5.1.9 What each term is worth

Full-formula R² is 0.878. Each bar below shows how much R² drops when that term is replaced by its mean contribution. Large drop: load-bearing term; near zero: decoration the formula could lose; negative: overfit signal (ablation improves R²).

Additive
Yes
Baseline R²
0.8779
Held-out rows
437

The notebook draws this chapter's figure from each held-out row; the row-by-row detail is there.

How to read this

For each additive term of the formula for Demand, the chart shows how much the held-out R² drops when that term is replaced by its mean contribution, so that it no longer varies from row to row. The bars are sorted from the largest drop down, and the dashed line marks the R² of the full model.

A large drop means the term carries real predictive work; the complexity it adds is paid for. A small drop means the term adds little beyond its average value: it may refine a stronger term, or its curve in the chapter "How each term responds to its inputs" may be nearly flat. A negative drop means the held-out R² rises without the term, which is a sign that the term tracks noise in the training rows. Each figure describes what a term contributes inside the model as discovered; the chart diagnoses the model, it is not a guide to removing terms. When the formula has no additive structure, the chart shows one bar for the whole formula.

5.1.10 What-If
Table 5.1.10 · The prediction at the typical row: every input at its median or most common value
ItemValue
Temperature13.5
WeekdaySunday
Year2022
Term 1 adds121
Term 2 adds0
Term 3 adds-48.19
Term 4 adds3.743
Prediction76.55
Additive
Yes
Expected coverage
0.8959
Held-out rows for the interval
437
Rows inside the interval
398
Terms in the formula
4
Residual P5
-7.214
Residual P95
6.79
Residual std
4.333

How to read this

The chapter shows the model's prediction for Demand at one input combination, with the contribution of each term stacked beneath it. The inputs start at their training medians, so the first view is the prediction for a typical row, and each input can move within the range the training rows cover; the notebook lets the reader change the inputs and watch the prediction and the stack update.

In the stack, a long bar marks the term that dominates at this input combination, often the one whose removal costs most in the chapter "What each term is worth". A short bar marks a term that makes a small adjustment here; the chapter "How each term responds to its inputs" shows whether it stays small everywhere or grows toward the edges of the range. A negative bar marks a term that pulls the prediction down at this point, either because the formula subtracts it or because it evaluates below zero.

The inputs stay inside the training range for a reason: the formula computes a value anywhere, but outside that range no training row supports it. When the formula has no additive structure, the stack holds a single bar for the whole formula and the inputs move the prediction directly.

5.1.11 Sensitivity

The prediction responds to 3 inputs. The formula is additive: each curve below shows the change in the prediction per unit of one input (∂ŷ/∂xᵢ) independently. Flat curves mean a constant linear response, bent curves a non-linear response that depends on the position in the range, and zero crossings a response that reverses sign between regions.

Additive
Yes
Terms in the formula
4

How to read this

For each input, the chart traces the rate at which the predicted Demand changes as that input moves across its training range, with the other inputs held at their medians. The rate is the local slope of the prediction with respect to the input, measured by a small finite difference at each point. A table summarizes each input with the mean, minimum and maximum of the absolute slope, which ranks the inputs by how strongly the prediction responds to them.

A flat curve means the model is close to linear in that input: the prediction responds at the same rate everywhere in the observed range, which is easy to state and says nothing about values beyond that range. A curve that grows or shrinks marks diminishing or accelerating returns, and whether that is plausible is a question for the domain. A curve that crosses zero means the prediction rises with the input in one part of the range and falls in another, which is either a real optimum or a sign that the formula bends around a few rows. A curve with a large magnitude marks an input to which the prediction is highly responsive; the chapter "What each term is worth" says whether the term behind it also carries predictive work.

In the table, the mean absolute slope ranks the inputs by typical responsiveness. A minimum close to the maximum means the responsiveness is nearly constant; a wide gap means it varies strongly across the range. The chapter reads the whole formula, so it applies whether or not the formula splits into terms.

5.1.12 How two inputs act together

The formula couples temperature and year: on 216 of 216 row pairs the mixed difference was not zero, so in the model's output the two act together (measured, not assumed). This describes the formula; it does not say that the data hold no other interaction. The heatmaps below show how the prediction's response to one input depends on another (the others held at the median).

Table 5.1.12 · Input pairs tested inside the formula
InputsIn the model's outputRow pairsPairs with a differenceMean absolute mixed difference
Temperature, YearAct together2162160.3135
Table 5.1.12 · The prediction across Temperature (columns) and Year (rows), the other inputs at their typical values
Year \ Temperature-15-6.6911.6189.92718.2426.55
2019117.9110.495.2978.7978.18106
2020117.9110.495.3678.978.32106.1
2021118110.595.5679.2478.72106.5
2022118110.695.8979.879.38107
2023118.1110.896.3580.5780.3107.8
2024118.111196.9281.5581.45108.7
Additive
Yes
Inputs in different terms act separately
Yes
Rows the search trained on, measured
875
Terms in the formula
4
Input pairs not tested
0

How to read this

When a single term of the formula combines two or more inputs, the prediction's response to one of them depends on the value of the other. This chapter draws one surface for each such pair: the predicted Demand across the plane of the two inputs, with every other input held at its training median. Pairs that never share a term have no interaction by construction, and the curves in the chapter "How each term responds to its inputs" already say everything about them. Where the search tested a pair, the summary says on how many pairs of rows the two inputs acted together in the model's output; that is a statement about the formula, not a finding that the data hold no other interaction.

Parallel stripes mean the two inputs act almost independently, so the surface is close to a sum of two one-input curves. Curved contours mean a real interaction, where the slope along one input changes with the other; the location of the peak or trough matters. A saddle, rising along one axis and falling along the other, marks a trade-off between the two. A sharp edge or cliff means the formula encodes a change of regime, and the curve for the same input in the chapter "How each term responds to its inputs" shows whether the bend appears there too.

The grid is deliberately coarse, and the color scale runs from low to high predictions. When the formula has no additive structure, the single whole-formula term holds every input, so every pair appears; the number of surfaces is capped for models with many inputs.

5.1.13 Worst Predictions

The worst held-out row was missed by 13.4 (target's scale). The 10 rows with the largest absolute residuals out of 437 held-out rows are shown. Each card breaks the failure down into per-term contributions and input values, so the failure mode is inspectable. A large residual with one concentrated term contribution means one term got this row wrong; a large residual with balanced contributions means a structural mismatch.

Table 5.1.13
ActualPredictedResidualTemperatureWeekdayYear
66.0579.49-13.4418.9Sunday2020
103.98116.57-12.5928.7Sunday2020
73.4385.54-12.116.2Saturday2020
118.48106.82+11.6625.9Tuesday2024
65.7577.38-11.6317.6Saturday2020
74.8685.53-10.676.7Friday2020
106.43117.08-10.6528.6Friday2020
69.1979.69-10.509.4Sunday2020
106.3696.13+10.2324.2Thursday2021
68.9578.52-9.5710.2Sunday2020
Additive
Yes
Expected coverage
0.8959
N extrapolated
0
Held-out rows
437
Held-out rows for the interval
437
Rows inside the interval
398
Residual P5
-7.214
Residual P95
6.79
Residual std
4.333

How to read this

The held-out rows on which the model misses Demand by the most, sorted by absolute residual with the largest first and capped at ten. Each card shows the row's actual value, the prediction, the residual, the contribution of every additive term at that row and the row's input values. R² and MAE say how good the model is on average; these cards say where it fails and let each failure be read input by input and term by term.

A large residual with one dominant term means that term produced the wrong value at this row; the row's value for that input, read against its curve in the chapter "How each term responds to its inputs", shows whether it fell in a region the formula models poorly. A large residual with balanced contributions means every term was a little off and the sum still missed, which points to a shape the formula cannot represent in that region. Residuals that change sign from card to card mean the misses are not a consistent bias but scattered errors on particular rows. When the formula has no additive structure, each card shows a single whole-formula contribution.

5.1.14 Prediction Interval Coverage

Across 437 held-out rows, the 95% prediction interval actually covers 95.2% of the rows, within 2.40 percentage points of the promise across every level reported. On these rows the per-row prediction interval held at face value.

Table 5.1.14
Nominal levelHalf-widthEmpirical coverage
50%2.923208 of 437 (47.6%)
80%5.553351 of 437 (80.32%)
90%7.128395 of 437 (90.39%)
95%8.493416 of 437 (95.19%)
Largest miss (percentage points)
2.403
Held-out rows
437
Rows inside the interval
208, 351, 395, 416
Residual P2.5
-8.722
Residual P97.5
7.817
Verdict
well-calibrated

How to read this

Each held-out prediction of Demand carries a prediction interval, and this chapter checks whether that interval covers the actual value as often as it claims. The interval reported with each prediction is built from the held-out residuals themselves: its bounds are the 2.5th and 97.5th percentiles of the residuals added to the prediction, so it is asymmetric when the residuals are skewed and assumes no particular error distribution.

The coverage table checks a second, simpler band: the symmetric interval that a normal error distribution with the residuals' standard deviation would give. At four nominal levels (50%, 80%, 90% and 95%) it lists the half-width of that normal band and the share of held-out rows whose actual value falls inside it. Empirical coverage close to nominal means the residuals are close enough to normal that the two bands agree and the interval can be taken at face value. Empirical coverage below nominal means the normal band is too narrow, the residuals have heavier tails than a normal distribution, and the percentile-based interval is the one to trust. Empirical coverage above nominal means the normal band is wider than the data needs, usually because a few large residuals inflate the standard deviation. Every figure comes from the same held-out residuals the intervals are built from.

5.1.15 Regression Diagnostics

437 held-out residuals, with a spread up to 13.4 in absolute terms. Mean residual is 0.309, close to zero. The model is approximately unbiased on these held-out rows (a small held-out set makes this less reliable; the Prediction Chart chapter states R² and the mean absolute error with their 95% confidence intervals). The charts below check whether the errors look like noise: a pattern in residuals-vs-fitted or a curving Q-Q means a structural miss. The held-out rows are a random draw, so their order carries no time and the autocorrelation of the residuals is not assessed.

Abs residual vs predicted r
0.06283
Bias
0.3087
Bias over residual sd
0.07124
Held-out rows
437
Order
shuffled
Residual sd
4.333
Share within normal band
0.9565

The notebook draws this chapter's figure from each held-out row; the row-by-row detail is there.

How to read this

Four residual diagnostics for Demand, all computed from the held-out residuals. Each asks in its own way whether the model's errors look like noise, which is what remains when a model has captured all the structure the data holds.

Residuals against predicted values: Each held-out row is plotted with the model's prediction on the horizontal axis and its residual on the vertical axis, around a zero line. A symmetric cloud around zero means errors of similar size across the predicted range and no systematic bias. A funnel or fan means the size of the errors depends on the predicted value: the model is more uncertain in some regions than in others, and its prediction interval is not equally trustworthy everywhere. A curved pattern, a smile or a frown, means the model misses a structural component; the chapters "How each term responds to its inputs" and "How two inputs act together" show the shapes the formula does capture.

Normal Q-Q plot: The sorted residuals are plotted against the quantiles of a normal distribution, with the diagonal marking a perfectly normal set of residuals. Points that hug the line mean approximately normal residuals, so the normal band in the Prediction Interval Coverage chapter will hold. An S-shape means heavier or lighter tails than normal; heavier tails (below the line at the left, above it at the right) mean the model occasionally produces large errors. A banana or arc means skewed residuals: the model is systematically high or low in part of the range.

Histogram: The residuals binned into equal-width intervals. A bell centered on zero means symmetric errors with no bias. An off-center bell means the model is biased, with a mean error away from zero. A long tail or two peaks mean outliers or two regimes inside the prediction range.

Autocorrelation: For each lag, the correlation of the residual sequence with itself shifted by that many rows, with the band that pure noise would stay inside at plus or minus 1.96 divided by the square root of the row count. Bars inside the band mean uncorrelated residuals with no order-dependent structure left. A bar at lag 1 outside the band means the residuals of neighboring dates correlate: structure in time that the model has not captured. A wave across the lags means periodic structure remains, and the Time Series chapter in the Data section is where to look for its period.

Autocorrelation carries meaning only when the row order itself does. When the data has a date column, the held-out rows are the most recent ones in date order, and the autocorrelation is assessed. Without a date column the held-out rows are a random draw: the row after a held-out row is an arbitrary other row, so the autocorrelation is not assessed and the summary above says so.

5.1.16 Search Progress

The search ran for 385 generations, ending at quality 0.844 (gain +0.408 from generation 2). The curve shows a substantial climb.

First generation
2
First quality
43.62%
Last generation
386
Last improvement ms
4,948,969
Last quality
84.37%
Max quality
84.37%
N points
200
N total generations
385
Search time ms
9,594,339
Stop reason
Out of budget

How to read this

The line traces the best quality the search for the Demand model had reached at each generation, from the first generation to the last. Quality is the technology's combined score on the training rows, the figure the Model Metrics chapter defines. A curve that flattens well before the last generation means the search converged: the budget was more than enough, and the model is the one the search settled on. A curve still rising at the last generation means the budget ended before the search settled, and the model is the best the search reached within it. The chart describes the search, not the data: it says whether the search had time to settle, not whether more rows would help.

5.1.17 Model Constraints

Across 437 held-out predictions, the formula is mathematically well-behaved: every output is finite, stays inside the training-target ±2σ band, and no prediction runs away beyond the bounded-prediction limit. It is safe to consume downstream at face value.

Table 5.1.17
NameStatusDetail
Output coherentPassno non-finite predictions across 437 rows
Within domainPassno rows outside the training target's ±2σ range across 437 rows
Bounded predictionsPassno runaway predictions beyond ±10σ across 437 rows
Held-out rows
437
N non finite
0
N outside domain
0
N runaway
0
Verdict
Clean

How to read this

Sanity checks on the Demand formula, run against the held-out rows. Three checks: every prediction is a finite number (output coherent), predictions stay within the range of the training target widened by two standard deviations on each side (within domain), and no single prediction runs away more than ten standard deviations from the training mean (bounded predictions).

These are pass or fail guards, not quality measures: a formula can clear all three and still predict poorly. A failure is the stronger signal. It means the formula misbehaves numerically somewhere in the data it was shown, and any downstream use of it should wait until that is understood.

5.1.18 Modeling

Measured during the search, on the rows the model was trained on

MAE of a straight line through the inputs (same rows)
9.596
RMSE of a straight line through the inputs (same rows)
11.66
Training MAE (rows the search trained on)
3.738
MAE of always predicting the mean (same rows)
9.709
RMSE of always predicting the mean (same rows)
11.88
Training R² (rows the search trained on)
0.8502
Training RMSE (rows the search trained on)
4.599
Rows the search trained on, measured
875
Error
13.18%
Inputs the straight line used
2
N train
1747
Quality
84.67%

How to read this

The function below trains the model for Demand on the processed data. Its output is the model that every other chapter of this section scores and dissects.

6 Data

Weekday shows a measured effect, with Wednesday averaging higher demand than Sunday. All columns are complete and free of high missingness, no duplicates were found, and the outlier share in demand is 0.14%.

Most notable in the Data section:

  • Weekday accounts for 6.1% of the spread in Demand: Wednesday averages 7.93 above Sunday (95% interval 6.08 to 9.79)

How to read this

The Data section describes the table as supplied, before any modeling: the Column Profiles overview of every column and its role, one chapter per column with its distribution and correlations, a closer look at columns with notable characteristics, Duplicate Rows, Leakage Suspicion, a map for paired coordinate columns, and the General chapter with descriptive statistics, correlations, missing values, outlier ranges, clusters and segments across all columns.

6.1 Column Profiles

Profiled 4 columns across 2,184 rows (3 numeric, 1 non-numeric): every column is at least 75% populated. Distributional statistics on numeric columns can be read at face value.

Table 6.1 · Columns
NameRoleTypeNMissingMeanStdMinP25MedianP75MaxSkewnessCV
DemandTargetnumber2184090.8512.1565.7581.1789.2298.82127.530.47940.1337
TemperatureInputnumber2184013.669.50-15.005.7013.5022.5030.70-0.15360.6952
WeekdayInputtext21840
YearInputinteger2184020212201920202022202320240.00018520.0008454
N columns
4
N high missing
0
N rows
2184
N strongly skewed
0
Table branch
main
Table ID
a2efa34d-c2a1-430d-b4d6-bc96273ba250

How to read this

One row per column of the analyzed table: its role in the analysis (the target being predicted, an input it is predicted from, or the segment column), its type, value count and missing count, and for numeric columns the mean, standard deviation, minimum, quartiles, maximum and interquartile range. A column with 25% or more missing values is flagged; its mean and quartiles describe only the rows that have a value.

Two further figures describe the shape of a numeric column. The skewness says whether the values lean to one side: close to zero the column is symmetric, from 0.5 it is moderately skewed and from 1 strongly skewed, with the longer tail on the high side when the figure is positive and on the low side when it is negative. In a strongly skewed column the mean is pulled toward the tail, and the median is the better guide to a typical value. The coefficient of variation is the standard deviation divided by the mean: it compares how widely columns spread regardless of their units, and is given only for a column whose mean is positive.

These are the columns as supplied, before any modeling: the reference against which every later chapter reads.

6.2 Demand

Demand: 65.8 to 128, median 89.2.

How to read this

A column chapter profiles one column: its distribution in figures and charts, and how it relates to the other columns. It opens with one line on what the column holds. The Description chapter carries its figures, with every other column summarized for each of its values where it has few, and its association with every other column where it is numeric. The Visualization chapter carries its charts. A table with a date column adds an Over Time and a Time Series chapter; a target with classes adds a Class Balance chapter.

6.2.1 Description
Table 6.2.1 · Demand
StatisticValue
Typenumber
Values present2184
Distinct values1704
Continuousyes
Decimal places2
Minimum65.75
Maximum127.5
Mean90.85
Median89.22
Mode77.79

The first 10 rows of 17. The other 7 are in the notebook.

How to read this

The figures below summarize Demand in numbers: where its values center (mean, median, mode), how far they spread (range, variance, standard deviation, interquartile range) and how they are distributed across percentiles. They are the reference for every chart in the Visualization chapter and for the correlation measures further down.

The figures for Demand are grouped: the column itself first, then where its values center, how far they spread, the shape of their distribution and its percentiles. Each statistic is explained in the Description chapter under General in the Data section.

6.2.1.1 Correlation
Table 6.2.1.1 · Correlations
ColumnPair ofAssociationPearson's r95% CI (Pearson)Spearman's ρKendall's τq-valueRows
Weekdaya number and a category0.2526< 0.0012184
Temperaturetwo numbers0.16620.16620.1251 to 0.20670.15910.08946< 0.0012184
Yeartwo numbers0.058390.058050.01615 to 0.099750.058390.042270.0066542184

How to read this

Each row pairs Demand with one other column, numeric or categorical, and reports how strongly the two go together on an association from 0 to 1, and whether an association this strong could be chance. For another numeric column the row adds the direction: Pearson's coefficient measures a straight-line relationship, and Spearman's rho and Kendall's tau measure a monotonic relationship on ranks, which makes them resistant to outliers and lets them see a curved but consistently rising or falling pattern. For a categorical column the association is the correlation ratio η, which has no direction. A strong association is not an explanation: two columns can go together when a third one moves both.

The table lists every other numeric or categorical column against Demand, with the pair's kind and association, three correlation coefficients and a confidence interval where the other column is numeric, the q-value and the rows the pair was measured on.

Table 6.2.1.1
MeasureMeaning
KindWhat the other column holds: a number (numeric) or categories (numeric_categorical). A categorical column is one that is not numeric and holds between 2 and 50 distinct values
AssociationThe strength of the pair from 0 to 1. With a numeric column: the stronger of Pearson's coefficient and Spearman's ρ, without its sign. With a categorical column: the correlation ratio η, the square root of the share of Demand's spread that lies between the categories
CovarianceNumeric partner only. The direction of the relationship (positive or negative) in the units of the two columns. It is not standardized, so its size says little about strength without the columns' own spread
Pearson's Correlation CoefficientNumeric partner only. The strength and direction of a linear relationship, from -1 (a perfect falling line) through 0 (no linear relationship) to 1 (a perfect rising line)
Spearman's ρNumeric partner only. The strength and direction of a monotonic relationship, computed on ranks rather than values, from -1 to 1. It follows a curved pattern as long as it rises or falls consistently, and outliers move it little
Kendall's τNumeric partner only. The strength and direction of association from the agreement and disagreement of rank order across pairs of rows, from -1 to 1. It is the steadier of the two rank measures when the rows are few
q-valueHow likely a pair this strong is among unrelated columns, adjusted for the number of pairs involving Demand (Benjamini-Hochberg). Among all pairs reported with q below 0.05, about 5% or fewer are expected to be false discoveries
95% CI (Pearson)Numeric partner only. The lower and upper bounds of the 95% confidence interval on the Pearson coefficient, from the Fisher z-transform. An interval that contains 0 leaves the direction of the relationship open
RowsThe rows in which both columns hold a value. The q-value and the interval of a pair rest on this count
6.2.2 Visualization

The rows of Demand are not charted in their order: consecutive rows are no more alike than rows picked at random (a correlation of 0.01 between each value and the next), so the order carries no pattern to show.

How to read this

The charts in this chapter were chosen from the type of Demand and of the columns it is compared with: a numeric column gets a histogram, a box plot and, when its row order carries a pattern, a value sequence, a categorical column gets a frequency chart, and its relation to each target of the analysis, and to the segment column when there is one, gets the chart that suits the pair, with the target on the vertical axis where it is a number. A column is not charted against every other column; which columns move together is shown under Strongest Correlations. The charts complement the figures in the Description chapter; the shape of a distribution and the position of its outliers are easier to see than to read.

6.3 Temperature

Temperature: -15 to 30.7, median 13.5.

6.3.1 Description
Table 6.3.1 · Temperature
StatisticValue
Typenumber
Values present2184
Distinct values366
Continuousyes
Decimal places1
Minimum-15
Maximum30.7
Mean13.66
Median13.5
Mode25.6

The first 10 rows of 17. The other 7 are in the notebook.

6.3.1.1 Correlation
Table 6.3.1.1 · Correlations
ColumnPair ofAssociationPearson's r95% CI (Pearson)Spearman's ρKendall's τq-valueRows
Demandtwo numbers0.16620.16620.1251 to 0.20670.15910.08946< 0.0012184
Yeartwo numbers0.038180.03818-0.00377 to 0.080.035410.025310.11172184
Weekdaya number and a category0.023570.97632184
6.3.2 Visualization

The rows of Temperature are not charted in their order: consecutive rows are no more alike than rows picked at random (a correlation of -0.00 between each value and the next), so the order carries no pattern to show.

6.4 Weekday

Weekday: 7 distinct values, most often Thursday.

6.4.1 Description
Table 6.4.1 · Weekday
StatisticValue
Typetext
Values present2184
Distinct values7
Continuousno
ModeThursday
Table 6.4.1 · Rows per value
VariableValueRowsShare
WeekdayFriday31314.33%
WeekdaySaturday31314.33%
WeekdayThursday31314.33%
WeekdayTuesday31314.33%
WeekdayWednesday31314.33%
WeekdayMonday31114.24%
WeekdaySunday30814.1%
6.4.1.1 By Value

Weekday accounts for 6.1% of the spread in Demand: Wednesday averages 7.93 above Sunday (95% interval 6.08 to 9.79). An association, not a cause.

Table 6.4.1.1 · Groups
TargetValueRowsAverage or share95% interval
DemandWednesday31393.4692.12 to 94.8
DemandTuesday31393.391.97 to 94.63
DemandThursday31392.991.6 to 94.2
DemandMonday31192.3991.07 to 93.72
DemandFriday31391.6690.37 to 92.95
DemandSaturday31386.6485.33 to 87.94
DemandSunday30885.5384.24 to 86.81
Table 6.4.1.1 · Mean per value of Weekday
WeekdayRowsYearTemperatureDemand
Friday3132021.513.5491.66
Monday3112021.513.6892.39
Saturday3132021.513.2686.64
Sunday3082021.513.5385.53
Thursday3132021.513.9592.9
Tuesday3132021.513.7393.3
Wednesday3132021.513.9393.46

How to read this

The rows are grouped by the value of Weekday, and every other column is summarized within each group with the same descriptive statistics. A statistic that shifts from group to group marks a column that moves with Weekday; one that stays level marks a column that does not. Groups with few rows produce unstable figures, so the row count of each group is the first thing to read. Where the groups differ in a target by more than chance would give, the chapter states by how much; it states that the two go together, not that one brings the other about.

6.5 Year

Year: 2,019 to 2,024, median 2,022, 6 distinct values.

6.5.1 Description
Table 6.5.1 · Year
StatisticValue
Typeinteger
Values present2184
Distinct values6
Continuousno
Decimal places0
Minimum2019
Maximum2024
Mean2021.5
Median2021.5
Mode2019

The first 10 rows of 17. The other 7 are in the notebook.

Table 6.5.1 · Rows per value
VariableValueRowsShare
Year201936516.71%
Year202036416.67%
Year202136316.62%
Year202236416.67%
Year202336416.67%
Year202436416.67%
6.5.1.1 By Value
Table 6.5.1.1 · Mean per value of Year
YearRowsTemperatureDemand
201936512.8491.4
202036413.7487.76
202136313.8390.96
202236413.2192.48
202336414.1289.64
202436414.2292.86
6.5.1.2 Correlation
Table 6.5.1.2 · Correlations
ColumnPair ofAssociationPearson's r95% CI (Pearson)Spearman's ρKendall's τq-valueRows
Demandtwo numbers0.058390.058050.01615 to 0.099750.058390.042270.019962184
Temperaturetwo numbers0.038180.03818-0.00377 to 0.080.035410.025310.11172184
Weekdaya number and a category0.0045512184
6.5.2 Visualization

The rows of Year are not charted in their order: consecutive rows are no more alike than rows picked at random (a correlation of 0.01 between each value and the next), so the order carries no pattern to show.

6.6 Duplicate Rows

Across 2,184 rows the table has no exact duplicates: every row's value vector is unique across all columns, so the row count reflects distinct rows.

Largest group size
0
N exact duplicates
0
N exact groups
0
N rows
2184
N unique
2184
Pct exact duplicates
0
Verdict
Clean

How to read this

This chapter counts rows that repeat another row exactly, value for value: how many rows take part in a duplicate group, how many groups exist, and how large the largest group is.

Duplicate rows inflate the apparent row count and can place identical rows on both sides of the training and held-out split, which flatters every quality figure in this report. Only exact repeats are detected here; rows that differ by a rounding digit or a whitespace variant count as distinct.

6.7 Leakage Suspicion

Nothing to check. No column that awaits an answer tracks a target at 0.95 or more, so no column on its own gives a target away.

Categorical verdict
Clean
Critical threshold
0.999
N categorical critical
0
N categorical suspects
0
N confirmed
0
N critical
0
N suspects
0
Threshold
0.95
Verdict
Clean

How to read this

For every column that is not a target, this chapter reads how closely the column tracks each target, on an association from 0 to 1, and lists any pair at 0.95 or more. For two numeric columns the association is the stronger of Pearson's r and Spearman's rho; when the column or the target is categorical it is the correlation ratio η, or Cramér's V when both are. At 0.999 or more the column reproduces the target: that is what a copy or a rescaled copy of it looks like.

A listed column poses one question: is its value known before the target's value exists? If it is, the column is a strong input and the quality stated in this report is real. If it was computed from the target or recorded after it, a formula that reads it looks right on these rows and will not hold on new data. The coefficients read the same in both cases; the answer needs someone who knows where the column came from.

The owner of the analysis can give that answer. A column confirmed as known before the target is listed as confirmed and is no longer a suspect. A column that turns out to be a leak is left out of the model's inputs, and the analysis run again.

6.8 General

Clustering found no clear groups. The best grouping of the 2,184 complete rows over 2 numeric columns is into 4 groups, with a silhouette of 0.439 (on a scale where 1 is fully separate groups and 0 is none), below the 0.50 that clear structure shows, so no Clusters chapter is written.

Table 6.8 · Groupings tried
GroupsSilhouetteInertiaKept
20.36192469.2
30.38641584.1
40.4388938.3yes
50.4185788.8
60.4192675.5
Inertia
1019.6
K
4
N columns used
2
N rows
2184
N rows complete
2184
Silhouette
0.4389
Verdict
Weak

How to read this

The General chapter covers what holds across all columns together: descriptive statistics, correlations, missing values and outlier ranges under Description, the Clusters found among the rows, and, when a segment column was chosen, the Segments.

6.8.1 Description
Table 6.8.1 · Columns
VariableTypeValues presentDistinct valuesContinuousDecimal places
Yearinteger21846no0
Temperaturenumber2184366yes1
Weekdaytext21847no
Demandnumber21841704yes2
Table 6.8.1 · Center
VariableMeanMedianMode
Year2021.52021.52019
Temperature13.6613.525.6
WeekdayThursday
Demand90.8589.2277.79
Table 6.8.1 · Spread
VariableMinimumMaximumStandard deviationVarianceInterquartile rangeSum
Year201920241.7092.92134,414,954
Temperature-1530.79.49690.1816.829834.3
Weekday
Demand65.75127.512.15147.517.66198,417
Table 6.8.1 · Shape
VariableSkewnessKurtosisTotal sum of squares
Year0.0001852-1.276376
Temperature-0.1536-1.086196,856
Weekday
Demand0.4794-0.4035322,091
Table 6.8.1 · Rows per value
VariableValueRowsShare
Year201936516.71%
Year202036416.67%
Year202136316.62%
Year202236416.67%
Year202336416.67%
Year202436416.67%
WeekdayFriday31314.33%
WeekdaySaturday31314.33%
WeekdayThursday31314.33%
WeekdayTuesday31314.33%

The first 10 rows of 13. The other 3 are in the notebook.

How to read this

This chapter summarizes every column at once: the descriptive statistics table below, then Correlation, Missing Values and Outliers. For a numeric column the table reports its center (mean, median, mode), its spread (standard deviation, variance, interquartile range, percentiles) and its shape (skewness, kurtosis); for a categorical column it reports the count and share of each category.

Each row of the tables describes one column. The statistics are grouped: the column itself, where its values center, how far they spread, what shape their distribution takes, and its percentiles. They read as follows.

Table 6.8.1
StatisticExplanation
VariableName of the column the statistics in the row describe
TypeType assigned during data processing (bool, integer, number, decimal, text or date)
Values presentNumber of rows in which the column holds a value
Distinct valuesNumber of different values the column holds
ContinuousWhether the column can take any value in a range, as opposed to a discrete column limited to a fixed set of values
Decimal placesLength of the fractional part of the values
MeanArithmetic average: the sum of all values divided by the number of values
MedianThe middle value: half of the values lie at or below it and half at or above it. It is also the 50% percentile
ModeThe value that appears most often
MinimumSmallest numeric value in the column

The first 10 rows of 20. The other 10 are in the notebook.

6.8.1.1 Missing Values

No column has a missing value: all 2,184 rows are complete.

N columns with missing
0
N complete rows
2184
N rows
2184
Pct complete rows
100

How to read this

The table lists, for each column, the count of present values (Values) beside the row count of the processed table (Rows), the number of missing values and their share. The larger the share, the less any statistic or model built on the column can be trusted.

  • Below 5% missing: safe to use as it is.
  • 5% to 25% missing: usable; filling the gaps or excluding those rows is worth considering.
  • 25% or more missing: the column is flagged and receives its own chapter in the Data section. Verify why so much is missing before trusting any result that depends on it.

A model is computed only on rows that hold a value in every column it reads, so gaps spread over several columns cost more rows than any one column's share suggests. The last column, Complete rows without, shows for each input with gaps how many rows would be complete if that column were left out; it is blank for a column without gaps, for a target, and for a column no model reads. A column that is the only gap in many rows is the one whose removal keeps the most data.

6.8.1.2 Outliers

1 of 3 numeric columns has values beyond the Tukey fences (1.5 times the interquartile range outside the quartiles). demand has the largest share: 0.1% of its values. Whether such values are rare but real rows or recording errors decides whether they are kept.

Table 6.8.1.2 · Outliers
ColumnValuesLower fenceUpper fenceBelowAboveShare
Demand2184none below125.30030.14%
Temperature2184none belownone above000%
Year2184none belownone above000%
N columns
3
N columns assessed
3
N columns with outliers
1
Worst column
demand
Worst pct
0.14

How to read this

The table counts the outliers of every numeric column by the Tukey rule. Q1 and Q3 are the values below which 25% and 75% of a column's values fall, and the interquartile range is Q3 minus Q1. The lower fence lies 1.5 times the interquartile range below Q1, the upper fence the same distance above Q3; a value beyond a fence is an outlier. For each column the table gives both fences, how many values lie below and above them, their share of the column's values, and the single value that lies furthest beyond its fence. These are the same fences the box plots draw their whiskers to.

A column is not assessed when it has fewer than four values, or when the middle half of its values sits on a single number: the interquartile range is then zero and the rule would call every other value an outlier.

Extreme values can be real (rare but legitimate rows) or errors (measurement mistakes, data-entry slips). Which case applies decides whether to keep, clip or drop them before trusting a model that uses the column. A strongly skewed column has many values beyond one fence without any of them being wrong.

6.8.1.3 Correlation

6 column pairs analyzed across 2,184 rows (3 of two numbers, 3 of a number and a category, 0 of two categories); 3 (50%) are unlikely to be chance, after allowing for how many pairs were tested. Any other pair may still show a large association, but one that cannot be told apart from chance on the rows the pair was measured on. Every pair is stated as an association from 0 to 1, whatever its kind, so pairs of different kinds can be ranked against each other. An association states that two columns go together, not that one brings the other about.

N categorical pairs
0
N mixed pairs
3
N numeric pairs
3
N pairs
6
N samples
2184
N significant
3
Table 6.8.1.3 · Pairs
Association95% CIColumnEta squaredGroupsKendallKindNOther columnPearsonQ valueSpearman
0.2526Demand0.063837numeric_categorical2184Weekday< 0.001
0.16620.1251, 0.2067Demand0.08946numeric2184Temperature0.1662< 0.0010.1591
0.058390.01615, 0.09975Demand0.04227numeric2184Year0.058050.013310.05839
0.03818-0.00377, 0.08Temperature0.02531numeric2184Year0.038180.11170.03541
0.02357Temperature0.0005567numeric_categorical2184Weekday1
0.00455Weekday2.100e-057numeric_categorical2184Year1

How to read this

This chapter measures how pairs of columns go together: the Correlation Measures table below, the Strongest Correlations, the Correlation Heatmap and, when the analysis has targets, the Potential Data Leaks. Numeric columns and categorical columns are both paired, a categorical column being one that is not numeric and holds between 2 and 50 distinct values. Every pair is stated as an association from 0 (unrelated) to 1 (one column gives the other away), so pairs of different kinds can be compared. An association states that two columns go together, not that one brings the other about.

The table lists every pair of columns once, with its kind, its association, the figures of its kind, its q-value and the number of rows the pair was measured on. A pair is measured on the rows where both columns hold a value.

Table 6.8.1.3
MeasureExplanation
KindWhat the two columns hold: two numbers (numeric), a number and a category (numeric_categorical), or two categories (categorical)
AssociationStrength of the pair from 0 to 1, whatever its kind. Two numbers: the stronger of Pearson's coefficient and Spearman's ρ, without its sign. A number and a category: the correlation ratio η. Two categories: Cramér's V
CovarianceTwo numbers only. Direction of the relationship (positive or negative) in the units of the two columns. It is not standardized, so its size says little about strength without further context
Pearson's Correlation CoefficientTwo numbers only. Strength and direction of a linear relationship, from -1 (perfect negative) through 0 (no linear relationship) to 1 (perfect positive)
Spearman's ρTwo numbers only. Strength and direction of a monotonic relationship, computed on ranks rather than values. It captures relationships that consistently rise or fall even when they are not linear, and it is less affected by extreme values
Kendall's τTwo numbers only. Strength and direction of a monotonic relationship based on the concordance of ranks between the two columns. More conservative than Spearman's ρ, and steadier on small tables
Correlation ratio ηA number and a category. The square root of the share of the number's spread that lies between the categories, from 0 (every category has the same average) to 1 (the category fixes the number). For a category of two values it equals the absolute Pearson coefficient with the category coded 0 and 1. Its square, η², is that share: an η of 0.6 means the categories account for 36% of the spread
Cramér's VTwo categories. How far the table of counts of the two columns departs from what unrelated columns would give, from 0 (unrelated) to 1 (each value of one column goes with one value of the other), corrected so that columns with many rare values do not read as related
q-valueHow likely a pair this strong is among unrelated columns, adjusted for the number of pairs listed (Benjamini-Hochberg false-discovery rate). Among all pairs reported with q below 0.05, about 5% or fewer are expected to be false discoveries. The right measure for ranking many pairs
95% CI (Pearson)Two numbers only. Lower and upper bounds of the 95% confidence interval on the Pearson coefficient, via the Fisher z-transform, on the rows the pair was measured on. A narrow interval means the coefficient is well estimated; a wide interval that straddles zero means the relationship is uncertain

The first 10 rows of 12. The other 2 are in the notebook.

6.8.1.3.1 Strongest Correlations

The 20 pairs of columns with the smallest q-values: the associations that remain significant after the Benjamini-Hochberg adjustment for the number of pairs tested. Among all pairs reported with q below 0.05, about 5% or fewer are expected to be false discoveries; a pair above 0.05 may be coincidence even when its association looks strong.

A pair with an association above 0.9 often signals a duplicate or derived column. Moderately strong pairs with a low q-value are the relationships most worth investigating.

Each listed pair is drawn below, the picture behind the figure. Two numbers are drawn as a scatter, one point per row, the quickest way to see whether a strong value rests on a trend or on a few rows far from the rest. A number and a category are drawn as the number's box plot per category. Two categories are drawn as a heat map of how many rows hold each combination of values.

6.8.1.3.3 Potential Data Leaks

The table lists the association between every column and each target, whatever the two hold, with its q-value. An association close to 1 with a target, together with a q-value near zero, is one of two things: a strong input, or a data leak, a column derived from the target after the fact, such as a tax amount computed from the price being predicted. A leaked column trains a model that looks perfect and fails on new data, because the leak is not available at prediction time.

The Leakage Suspicion chapter in the Data section lists the pairs at 0.95 or more and marks those at 0.999 or more, where a column reproduces the target. For two numbers the association is whichever of Pearson's r and Spearman's rho is the stronger, because a column derived from the target often follows a curve rather than a line: the log of a price tracks the price perfectly, and Pearson alone reads that as weaker than it is. For a number and a category it is the correlation ratio η, and for two categories Cramér's V. Whether a listed column is a strong input or a leak depends on whether it is known before the target exists, which the owner of the analysis can confirm.

7 Implications

Aggregate share of variation explained for demand segments reaches 0.878 and measured share for out-of-distribution rows is 0. Covered share is 0.99 with zero held-out rows flagged out-of-distribution. Quality is markedly weaker for rows with Sunday as the weekday; see the Concerns chapter.

Nothing in the Implications section's numbers stood out as unusual.

How to read this

The Implications section states how to act on the models: the Stakeholder Summary and the Recommended Next Data, where the models hold and where they weaken (Quality by Input Range, Rows unlike the ones the model learned from, Per-Segment Predictions, Fairness), what to weigh before relying on them (Causal Honesty, Deployment Readiness), and the Provenance & Audit trail a reviewer needs to retrace the analysis.

7.1 Stakeholder Summary

The model predicts Demand and explains 88% of the variation in Demand, relying most strongly on Temperature. Moving Temperature from 5.90 to 22.1 raises the model's output by about 2.08 on average, with everything else as observed. Compared with a straight line through the data, the model explained an additional 83 points of variance explained on the held-out rows, and showed a large effect size.

The model captures most of the pattern, but its quality drops on rows with Weekday equal to Sunday, where it explains only 69% of the variation, far less than overall. The formula is short but built from functions that take a specialist to read. The model's errors differ between Weekday groups. Validate on a fresh sample before relying on the model for decisions.

7.2 Recommended Next Data

  • Collect more rows where Weekday = Sunday. Reason: the model is far less accurate on the 51 held-out rows where Weekday = Sunday, explaining 69% of the variation there.
  • Inspect the model's predictions for the column Weekday. Reason: the model's errors differ between groups of Weekday.

7.3 Quality by Input Range

Quality by Input Range splits the held-out rows by every usable input and compares the model's quality on each segment with its quality on all held-out rows. For a number the quality is R², the share of variation explained; for a yes-or-no target it is accuracy, the share of rows classified correctly, the measure the Classification Performance chapter reports. A numeric input is split into quartiles; a categorical input with at most ten values is split by value. A segment with fewer than three held-out rows is left out, because its gap would be noise.

The chart is sorted from the worst gap to the best. Each bar is the segment's figure minus the figure on all held-out rows.

  • Negative bars: the model is weaker on these rows than on all held-out rows. A segment 0.25 or more below the overall value (25 points of accuracy) reads much weaker; a segment 0.10 to 0.25 below reads weaker. These are the segments to treat with caution.
  • Positive bars: the model is stronger on these rows than overall. A strong segment can mask weakness elsewhere, so the negative segments come first.
7.3.1 Demand by Input Range

Segment weekday = Sunday is much weaker than the aggregate (51 held-out rows): segment R² 0.687 against aggregate R² 0.878 (gap -0.191). A drop this large means the model describes this slice of the data poorly; an input interaction or a missing column may be specific to this subset.

Table 7.3.1
SegmentRowsR²Gap to all rowsVerdict
Weekday = Sunday510.6871-0.19084Much weaker than on all rows
Weekday = Thursday660.8508-0.02713In line with all rows
Weekday = Saturday590.8617-0.01623In line with all rows
Temperature = q41160.7500-0.12788In line with all rows
Temperature = q21150.3763-0.50156In line with all rows
Year = q21630.8732-0.00471In line with all rows
Temperature = q11030.6966-0.18130In line with all rows
Year = q41340.8701-0.00785In line with all rows
Year = q3690.8925+0.01464In line with all rows
Year = q1710.8568-0.02110In line with all rows

The first 10 rows of 15. The other 5 are in the notebook.

Aggregate MAE
3.488
Aggregate R²
0.8779
Measure
r2
Target
Demand

7.4 Rows unlike the ones the model learned from

0 of 437 held-out rows (0%) lie further from the training rows than 99 in 100 rows like them would, measured on the 2 inputs the model reads (temperature, year). That is a small minority; the held-out figures describe the model on rows like the ones it was trained on.

Table 7.4
TargetInputs measuredLineHeld-out rowsBeyond the lineShare
DemandTemperature, Year3.03543700%
Table 7.4 · Score bins · 24 of 30 rows shown
CountFromTo
000.121
00.1210.243
190.2430.364
100.3640.486
80.4860.607
90.6070.728
70.7280.85
530.850.971
370.9711.093
311.0931.214

The first 10 rows of 24. The other 14 are in the notebook.

How to read this

Out-of-distribution detection finds held-out rows that lie far from the training rows of a model. It looks only at the numeric inputs the model reads. Each of them is standardized against the mean and standard deviation of the training rows, and the standardized values are combined into one distance per row. The line a row is read against depends on the number of inputs: it is the distance that 99 in 100 rows like the training rows stay below. A row beyond the line is flagged as out of distribution, and the held-out figures are unlikely to apply to it. When the held-out rows resemble the training rows, about one row in a hundred is flagged.

The chart shows one bar per held-out row in row order; the flagged rows are the bars at or above the line. With more than one target, the chart shows the model with the largest flagged share, and the figures name it.

The check treats inputs independently, so it will not notice a rare combination of values that are each ordinary on their own, such as a large height with a small weight. It is a first screen. A decision that depends on catching unusual inputs needs a dedicated check.

7.5 Fairness

This chapter checks the held-out predictions for uneven treatment of groups. For every categorical column with two to ten distinct values, other than the target, it reports per group the row count, mean actual value, mean prediction and mean residual, with R² and MAE for a number or accuracy, the share of rows classified correctly, for a yes-or-no target, and two measures across the groups.

  • Prediction parity ratio: the smallest group mean prediction divided by the largest, in absolute value. A ratio of 1.0 is perfect parity. Below 0.80, the four-fifths rule, some group receives systematically different predictions.
  • Largest mean residual: the largest absolute mean residual of any group. Above 30% of the overall residual standard deviation, at least one group is systematically over- or under-predicted.

The verdict combines the two: balanced when neither measure trips, parity gap or residual bias when one does, parity gap and residual bias when both do, and insufficient data when fewer than two groups have enough held-out rows.

Diafunc does not decide which columns are protected attributes; it reports every plausible one. A flagged column matters where it is a protected attribute in the decision the model supports, and can be set aside where it is not.

7.5.1 Demand Fairness

Column Weekday splits the held-out rows into 7 groups. The prediction-parity ratio is 0.96 (smallest over largest mean prediction), the largest absolute group residual mean is 5.14 (1.19 times the overall residual standard deviation). Residual bias: at least one group is systematically over- or under-predicted. The model's errors are not zero-mean across groups; its predictions for the affected groups deserve caution.

Aggregate residual std
4.333
N columns
1
N proxies
0
Proxy threshold
0.5
Table 7.5.1 · Columns
Bias max abs residual meanColumnGroupsInterpretationN groupsPrediction parity ratioVerdict
5.14WeekdayThursday, Monday, Wednesday, Tuesday, Friday, Saturday, SundayColumn Weekday splits the held-out rows into 7 groups. The prediction-parity ratio is 0.96 (smallest over largest mean prediction), the largest absolute group residual mean is 5.14 (1.19 times the overall residual standard deviation). Residual bias: at least one group is systematically over- or under-predicted. The model's errors are not zero-mean across groups; its predictions for the affected groups deserve caution.70.96Residual bias

7.6 Causal Honesty

Diafunc found a formula that captures the structure in the training data. That structure is correlative: it states what predicts what in this data. It does not establish that any input causes the target.

A correlative model is the right tool for predicting the target on new rows like these, for exploring which inputs carry information about the target, and for an early-stage diagnostic or screening tool.

A correlative model is not the right tool for claiming that intervening on an input will change the target, for attributing a target's values to specific causes for accountability, or for choosing between policies that act on the inputs.

The Quality by Input Range, Fairness and Concerns chapters show the most common confounding patterns in the data.

The model is correlative: it captures which columns predict the target in the training data, not whether changing one would change the other. Predictions are reliable for inputs that look like the training distribution; they are not evidence that intervening on an input will change the target. The 4 upgrade pathways below show what evidence would support a causal claim.

Table 7.6 · Upgrade pathways
NameSummary
Controlled experimentRandomize the input to be acted on, then analyze again. Randomization breaks confounding, so any change in the target is attributable to the input.
Natural experimentFind a setting where the input varied for reasons unrelated to the target, an instrumental variable. Variation of that kind supports causal inference.
Causal graphWrite out what plausibly causes what, then check whether the model's terms are consistent with the conditional independences the graph implies.
Control for confoundersIf a third variable plausibly moves both the input and the target, stratify by it or condition on it before training again. Gaps in the Quality by Input Range chapter are a clue.

7.7 Deployment Readiness

The analysis ran with the configuration below. The checks and the verdict of this chapter are read against it.

  • Targets: 1 target: demand
  • Rows: 2,184 rows
  • Per-Segment Predictions: not produced, because no segment column was chosen
  • Fairness: compared across 1 categorical column (weekday); which of them are protected attributes is not decided here
  • Out-of-Distribution: held-out rows are scored against the training rows; predictions made outside this report are not scored
  • Provenance & Audit: recorded in the chapter of that name

Across 6 checks (5 pass, 1 warns, 0 fail), the model passes the hard gates but at least one check warns: Usable with care. A limited audience and monitoring of the warning signals come before a broad rollout.

Table 7.7
NameStatusDetail
GeneralizationPassquality on the held-out rows matches quality on the rows the model was found on
Prediction Interval CoveragePasscoverage matches the interval level, largest gap 2.40 percentage points
Baseline Lift for DemandPassbeats the best baseline, R² lift 0.83
Model ConstraintsPassevery held-out prediction is finite and within the training range
FairnessWarn1 column compared, 1 flagged: Weekday (a group is systematically over- or under-predicted)
Out-of-DistributionPass0% of held-out rows are out of distribution
N critical concerns
0
N fail
0
N pass
5
N warn
1
Overall verdict
Caution

7.8 Provenance & Audit

This record captures the inputs and configuration that produced the report, so the analysis can be reproduced or the result defended in an audit.

Table 7.8
ItemValue
Analysis ID62d6db30-d51a-11f1-9069-eb4c89cc8d4f
Run time2026-10-31 13:44 UTC
Total rows2,184
Modeled targetsDemand
Segment columnnot available
Time limit4 h 0 min
Time taken2 h 41 min
Credit budget4,000 credits
Ufinq version0.3.51

7.9 Findings

1 finding from the implications diagnostics (1 Warning) is listed in the Concerns chapter at the top of the analysis.

Loading Diafunc…