Structure preview

Stage 2. Rebuild two predictions from start to finish

Shakhtar–Sporting and Galatasaray–Stuttgart: dates, weights, sums, adjusted averages, Poisson and percentages. Formulas, substitutions and results together.

Section: Probability Updated:
Articles /modello-predittivo-due-esempi-calcoli
Stage 2. Rebuild two predictions from start to finish

35 min

Shakhtar–Sporting and Galatasaray–Stuttgart: dates, weights, sums, adjusted averages, Poisson and percentages. Formulas, substitutions and results together.

Illustration for the Probability section
Section: Probability

The predictive modelling path

How to read the examples

Each example repeats the same procedure: dates and weights → sums → means → factors → expected goals → probabilities. All times are UTC. Displayed numbers are rounded; calculations retain more digits, so hand calculations with shortened inputs may differ in the last digit. Follow one row first, then one team, then the comparison.

These are two snapshots from 3 November 2026, not updated forecasts. “Historical data” means data present in that snapshot: we reproduce calculations, not independently certify every source result. Data-feed checks and validation belong to stage 3.

Example 1. Shakhtar Donetsk–Sporting CP

A. Freeze time

QuantityResult ≈
Calculated2026-11-03T15:15:39Z
Kickoff2026-11-03T17:45:00Z
cutoff2026-11-03T11:15:39Z

Calculation precedes kickoff: subtract four hours from calculation time. All following ages are measured to this cutoff, not to today.

B. Read each row and weight goals

GF and GS always refer to the team named above the table. Calculate weight w, then w×GF and w×GS. An away 0–2 win therefore appears as GF=2, GS=0 for the away team.

Home · Shakhtar Donetsk

UTC dateOpponentGFGSAge d (days)w ≈w×GF ≈w×GS ≈
2026-10-14T19:00:00ZAEK Athens FC3119.6775350.9270251362.7810754080.927025136
2025-01-22T17:45:00ZStade Brestois 2920649.7296180.0819217880.1638435760
2024-12-10T20:00:00ZBayern München15692.6358680.0694454010.0694454010.347227003
2024-11-06T17:45:00ZBSC Young Boys21726.7296180.0609011480.1218022960.060901148

Away · Sporting CP

UTC dateOpponentGFGSAge d (days)w ≈w×GF ≈w×GS ≈
2026-10-13T16:45:00ZLens2020.7712850.9231288731.8462577460
2026-04-15T19:00:00ZArsenal00201.6775350.45995647500
2026-03-11T20:00:00ZBodo/Glimt03236.6358680.40202476701.206074302
2026-01-28T20:00:00ZAthletic Club32278.6358680.3419892671.0259678020.683978535
2025-12-09T17:45:00ZBayern München13328.7296180.2819916490.2819916490.845974947
2025-11-04T20:00:00ZJuventus11363.6358680.2465241240.2465241240.246524124
2025-10-01T19:00:00ZNapoli12397.6775350.2162362590.2162362590.432472518
2025-02-19T17:45:00ZBorussia Dortmund00621.7296180.09124862100
2025-01-22T17:45:00ZRB Leipzig12649.7296180.0819217880.0819217880.163843576
2024-12-10T20:00:00ZClub Brugge KV12692.6358680.0694454010.0694454010.138890801

Repeat the first home-team row slowly. One day contains 86,400 seconds. Calculate age, exponent, weight and the two products, in that order.

d=(2026-11-03T11:15:39Z − 2026-10-14T19:00:00Z) / 86400 seconds
=1700139/86400 ≈ 19.677534722222
−ln(2)×d/180 ≈ -0.075774598406
w=exp(-0.075774598406) ≈ 0.927025135955
w×GF=0.927025135955×3 ≈ 2.781075407866
w×GS=0.927025135955×1 ≈ 0.927025135955

C. Add, then divide

Each column sum gives W, F and C. Dividing F and C by W gives raw means. The expansions below show every W term; other sums follow the product columns exactly.

Home

W=0.927025136 + 0.081921788 + 0.069445401 + 0.060901148 ≈ 1.139293472263
F=2.781075408 + 0.163843576 + 0.069445401 + 0.121802296 ≈ 3.136166679977
C=0.927025136 + 0 + 0.347227003 + 0.060901148 ≈ 1.335153286442
F/W=3.136166679977/1.139293472263 ≈ 2.752729438315
C/W=1.335153286442/1.139293472263 ≈ 1.171913399793

Away

W=0.923128873 + 0.459956475 + 0.402024767 + 0.341989267 + 0.281991649 + 0.246524124 + 0.216236259 + 0.091248621 + 0.081921788 + 0.069445401 ≈ 3.114467223228
F=1.846257746 + 0 + 0 + 1.025967802 + 0.281991649 + 0.246524124 + 0.216236259 + 0 + 0.081921788 + 0.069445401 ≈ 3.768344768108
C=0 + 0 + 1.206074302 + 0.683978535 + 0.845974947 + 0.246524124 + 0.432472518 + 0 + 0.163843576 + 0.138890801 ≈ 3.717758802119
F/W=3.768344768108/3.114467223228 ≈ 1.209948443189
C/W=3.717758802119/3.114467223228 ≈ 1.193706189743

D. The 537-match reference

These are supplied competition aggregates, not 537 invented rows. The match count is not the denominator: divide by total weight W_L.

W_L=183.801231794287; S_H=367.661454134413; S_A=247.480930595595
μ_H=S_H/W_L=367.661454134413/183.801231794287 ≈ 2.0003209475
μ_A=S_A/W_L=247.480930595595/183.801231794287 ≈ 1.346459586694

E. Adjust four means and derive factors

For each row multiply reference by 8, add the goal sum, divide by W+8. This gives the adjusted mean. Divide it again by the same reference for the factor. Do not swap μ_H and μ_A.

QuantitySubstitutionAdjusted mean ≈Result ≈
Home attack(3.136166679977+8×2.0003209475)/(1.139293472263+8) = (3.136166679977+16.00256758)/9.1392934722632.0941152965562.094115296556/2.0003209475 = 1.04688964997
Home conceded(1.335153286442+8×1.346459586694)/(1.139293472263+8) = (1.335153286442+10.771676693552)/9.1392934722631.3247008662911.324700866291/1.346459586694 = 0.983840049402
Away attack(3.768344768108+8×1.346459586694)/(3.114467223228+8) = (3.768344768108+10.771676693552)/11.1144672232281.3082067875711.308206787571/1.346459586694 = 0.97159008744
Away conceded(3.717758802119+8×2.0003209475)/(3.114467223228+8) = (3.717758802119+16.00256758)/11.1144672232281.7742934488941.774293448894/2.0003209475 = 0.887004383527

Home: α=1.139293472263/(1.139293472263+8) ≈ 0.124658812601
α × 100% ≈ 12.465881%
(1−α) × 100% ≈ 87.534119%

Away: α=3.114467223228/(3.114467223228+8) ≈ 0.280217410396
α × 100% ≈ 28.021741%
(1−α) × 100% ≈ 71.978259%

F. Multiply to obtain λ

λ_H=2.0003209475 × 1.04688964997 × 0.887004383527 ≈ 1.857489447656
λ_A=1.346459586694 × 0.97159008744 × 0.983840049402 ≈ 1.287066230512

Both means lie between 0.15 and 5: no clipping. Do not round to 2 or 1 before Poisson; that would change the prediction.

G. Calculate counts one by one

Home

kSubstitutionP(G=k) ≈
0exp(−1.857489447656)0.156063945658
10.156063945658 × 1.857489447656 / 10.28988713222
20.28988713222 × 1.857489447656 / 20.269231144555
30.269231144555 × 1.857489447656 / 30.16669800333
40.16669800333 × 1.857489447656 / 40.077409945533

Away

kSubstitutionP(G=k) ≈
0exp(−1.287066230512)0.276079549902
10.276079549902 × 1.287066230512 / 10.355332665613
20.355332665613 × 1.287066230512 / 20.228668337254
30.228668337254 × 1.287066230512 / 30.098103764956
40.098103764956 × 1.287066230512 / 40.03156651074

This table shows only the first five counts, not the whole distribution. Final sums use all counts from 0 to 30 for both teams.

H. Multiply cells, then group them

Z ≈ 1
M(1,1)=(0.28988713222 × 0.355332665613)/Z ≈ 0.103006367419
M(1,1) × 100% ≈ 10.300637%

The 1–1 cell is only part of a draw. Below fix home goals i and sum matrix columns j smaller than, equal to or greater than i. Rows 6–30 are collected in the last row, not omitted from calculation.

ij<i → 1j=i → Xj>i → 2
000.0430860638730.112977881785
10.0800319089860.1030063674190.106848855816
20.1699958334690.0615646381620.037670672923
30.143373710850.0163537017370.006970590743
40.0741729958460.0024435618770.00079338781
50.0284628894970.0002336741020.000061067795
6…300.0119323590640.0000163042460.000003534
Σ0.5079696977120.2267043114170.265325990872

I. Convert probabilities to percentages

Eventp ≈p × 100%
10.5079696977120.507969697712 × 100% ≈ 50.797%
X0.2267043114170.226704311417 × 100% ≈ 22.6704%
20.2653259908720.265325990872 × 100% ≈ 26.5326%
1X0.7346740091280.734674009128 × 100% ≈ 73.4674%
X20.4920303022880.492030302288 × 100% ≈ 49.203%
120.7732956885830.773295688583 × 100% ≈ 77.3296%
Over 2.50.6084049457380.608404945738 × 100% ≈ 60.8405%
Under 2.50.3915950542620.391595054262 × 100% ≈ 39.1595%
GG0.6109425683130.610942568313 × 100% ≈ 61.0943%
No GG0.3890574316870.389057431687 × 100% ≈ 38.9057%

P1+PX+P2 ≈ 1
P1X+PX2+P12 ≈ 2

An outcome more likely than the others can still be below 50%. Double chances sum to 200% because they overlap, not because calculations are wrong.

Example 2. Galatasaray–VfB Stuttgart

A. Freeze time

QuantityResult ≈
Calculated2026-11-03T15:09:56Z
Kickoff2026-11-03T17:45:00Z
cutoff2026-11-03T11:09:56Z

Calculation precedes kickoff: subtract four hours from calculation time. All following ages are measured to this cutoff, not to today.

B. Read each row and weight goals

GF and GS always refer to the team named above the table. Calculate weight w, then w×GF and w×GS. An away 0–2 win therefore appears as GF=2, GS=0 for the away team.

Home · Galatasaray

UTC dateOpponentGFGSAge d (days)w ≈w×GF ≈w×GS ≈
2026-10-13T19:00:00ZBarcelona1420.6735650.9234763130.9234763133.693905253
2026-03-10T17:45:00ZLiverpool10237.7256480.4003411880.4003411880
2026-02-17T17:45:00ZJuventus52258.7256480.369241161.8462058010.738482321
2026-01-21T17:45:00ZAtletico Madrid11285.7256480.3327787670.3327787670.332778767
2025-11-25T17:45:00ZUnion St. Gilloise01342.7256480.26719568600.267195686
2025-10-22T16:45:00ZBodo/Glimt31376.7673150.2343681210.7031043630.234368121
2025-09-30T19:00:00ZLiverpool10398.6735650.2154084670.2154084670

Away · VfB Stuttgart

UTC dateOpponentGFGSAge d (days)w ≈w×GF ≈w×GS ≈
2026-10-14T19:00:00ZSlovan Bratislava3019.6735650.9270393082.7811179240
2025-01-21T20:00:00ZSlovan Bratislava31650.6318980.0816376430.244912930.081637643
2024-11-27T17:45:00ZFK Crvena Zvezda15705.7256480.0660316710.0660316710.330158353

Repeat the first home-team row slowly. One day contains 86,400 seconds. Calculate age, exponent, weight and the two products, in that order.

d=(2026-11-03T11:09:56Z − 2026-10-13T19:00:00Z) / 86400 seconds
=1786196/86400 ≈ 20.673564814815
−ln(2)×d/180 ≈ -0.079610128686
w=exp(-0.079610128686) ≈ 0.923476313135
w×GF=0.923476313135×1 ≈ 0.923476313135
w×GS=0.923476313135×4 ≈ 3.693905252541

C. Add, then divide

Each column sum gives W, F and C. Dividing F and C by W gives raw means. The expansions below show every W term; other sums follow the product columns exactly.

Home

W=0.923476313 + 0.400341188 + 0.36924116 + 0.332778767 + 0.267195686 + 0.234368121 + 0.215408467 ≈ 2.74280970149
F=0.923476313 + 0.400341188 + 1.846205801 + 0.332778767 + 0 + 0.703104363 + 0.215408467 ≈ 4.42131489829
C=3.693905253 + 0 + 0.738482321 + 0.332778767 + 0.267195686 + 0.234368121 + 0 ≈ 5.266730146814
F/W=4.42131489829/2.74280970149 ≈ 1.611965604427
C/W=5.266730146814/2.74280970149 ≈ 1.920195245027

Away

W=0.927039308 + 0.081637643 + 0.066031671 ≈ 1.074708621543
F=2.781117924 + 0.24491293 + 0.066031671 ≈ 3.092062523618
C=0 + 0.081637643 + 0.330158353 ≈ 0.411795995708
F/W=3.092062523618/1.074708621543 ≈ 2.877117073071
C/W=0.411795995708/1.074708621543 ≈ 0.383169900616

D. The 537-match reference

These are supplied competition aggregates, not 537 invented rows. The match count is not the denominator: divide by total weight W_L.

W_L=183.804041656802; S_H=367.667074761263; S_A=247.484713961916
μ_H=S_H/W_L=367.667074761263/183.804041656802 ≈ 2.0003209475
μ_A=S_A/W_L=247.484713961916/183.804041656802 ≈ 1.346459586694

E. Adjust four means and derive factors

For each row multiply reference by 8, add the goal sum, divide by W+8. This gives the adjusted mean. Divide it again by the same reference for the factor. Do not swap μ_H and μ_A.

QuantitySubstitutionAdjusted mean ≈Result ≈
Home attack(4.42131489829+8×2.0003209475)/(2.74280970149+8) = (4.42131489829+16.00256758)/10.742809701491.9011676689631.901167668963/2.0003209475 = 0.950431315204
Home conceded(5.266730146814+8×1.346459586694)/(2.74280970149+8) = (5.266730146814+10.771676693553)/10.742809701491.4929433999141.492943399914/1.346459586694 = 1.108791837993
Away attack(3.092062523618+8×1.346459586694)/(1.074708621543+8) = (3.092062523618+10.771676693553)/9.0747086215431.5277338144231.527733814423/1.346459586694 = 1.134630277448
Away conceded(0.411795995708+8×2.0003209475)/(1.074708621543+8) = (0.411795995708+16.00256758)/9.0747086215431.808803374331.80880337433/2.0003209475 = 0.904256577721

Home: α=2.74280970149/(2.74280970149+8) ≈ 0.255315860348
α × 100% ≈ 25.531586%
(1−α) × 100% ≈ 74.468414%

Away: α=1.074708621543/(1.074708621543+8) ≈ 0.118428994953
α × 100% ≈ 11.842899%
(1−α) × 100% ≈ 88.157101%

F. Multiply to obtain λ

λ_H=2.0003209475 × 0.950431315204 × 0.904256577721 ≈ 1.71914337001
λ_A=1.346459586694 × 1.134630277448 × 1.108791837993 ≈ 1.693938784058

Both means lie between 0.15 and 5: no clipping. Do not round to 2 or 1 before Poisson; that would change the prediction.

G. Calculate counts one by one

Home

kSubstitutionP(G=k) ≈
0exp(−1.71914337001)0.179219607064
10.179219607064 × 1.71914337001 / 10.308104199259
20.308104199259 × 1.71914337001 / 20.264837645714
30.264837645714 × 1.71914337001 / 30.151764627586
40.151764627586 × 1.71914337001 / 40.065226288329

Away

kSubstitutionP(G=k) ≈
0exp(−1.693938784058)0.183794170876
10.183794170876 × 1.693938784058 / 10.31133607433
20.31133607433 × 1.693938784058 / 20.263692125592
30.263692125592 × 1.693938784058 / 30.148892772864
40.148892772864 × 1.693938784058 / 40.063053810655

This table shows only the first five counts, not the whole distribution. Final sums use all counts from 0 to 30 for both teams.

H. Multiply cells, then group them

Z ≈ 1
M(1,1)=(0.308104199259 × 0.31133607433)/Z ≈ 0.095923951882
M(1,1) × 100% ≈ 9.592395%

The 1–1 cell is only part of a draw. Below fix home goals i and sum matrix columns j smaller than, equal to or greater than i. Rows 6–30 are collected in the last row, not omitted from calculation.

ij<i → 1j=i → Xj>i → 2
000.0329395190850.146280087979
10.0566277558460.0959239518820.155552491531
20.1311291284620.0698356017350.063872915517
30.1151623945080.0225966562240.014005576854
40.0592068896810.0041127660340.001906632614
50.0217711132630.0004790753260.000176479637
6…300.0083673641130.0000411653580.00001243435
Σ0.3922646458740.2259287356450.381806618481

I. Convert probabilities to percentages

Eventp ≈p × 100%
10.3922646458740.392264645874 × 100% ≈ 39.2265%
X0.2259287356450.225928735645 × 100% ≈ 22.5929%
20.3818066184810.381806618481 × 100% ≈ 38.1807%
1X0.6181933815190.618193381519 × 100% ≈ 61.8193%
X20.6077353541260.607735354126 × 100% ≈ 60.7735%
120.7740712643550.774071264355 × 100% ≈ 77.4071%
Over 2.50.6627768296360.662776829636 × 100% ≈ 66.2777%
Under 2.50.3372231703640.337223170364 × 100% ≈ 33.7223%
GG0.6699257411460.669925741146 × 100% ≈ 66.9926%
No GG0.3300742588540.330074258854 × 100% ≈ 33.0074%

P1+PX+P2 ≈ 1
P1X+PX2+P12 ≈ 2

An outcome more likely than the others can still be below 50%. Double chances sum to 200% because they overlap, not because calculations are wrong.

A separate step: probability and odds

EV means expected value: theoretical mean net gain per unit if the probability is correct. Multiply each possible gain by its probability and add: p(q−1)+(1−p)(−1)=pq−1. Model-implied fair odds set EV=0: pq=1, hence q=1/p. Costs and margins are excluded.

Only after probabilities do we introduce price: historical decimal odds 1X=1.85, SBO, 2026-11-03 12:16:17 UTC. Decimal odds q include return of the initial unit: net gain if the event occurs is q−1; otherwise that unit is lost.

p=P1+PX=0.507969697712+0.226704311417 ≈ 0.734674009128
p × 100% ≈ 73.467401%
q_fair=1/p ≈ 1.361147920812
EV=p(q−1)−(1−p)=pq−1
EV=0.734674009128×1.85−1 ≈ 0.359146916888
EV × 100% ≈ 35.914692%

Two clocks matter: the match-history cutoff is 11:15:39 UTC; this quote is from 12:16:17 UTC, still before calculation at 15:15:39 UTC. It is a price for the downstream comparison, not an input to goal means. Historical evaluation must record both times and never substitute odds known only after forecasting.

This expected value is conditional on an unvalidated model probability. It does not mean a 35.9% winning probability or guaranteed profit. The quote is historical, not a current offer. Odds did not enter the goal calculations; they enter only afterwards. The three double chances overlap and must not be jointly normalised as if they were 1, X and 2.

What we actually established

The sums, factors and probabilities reconstruct the two snapshots. We have not proved teams follow Poisson, that events are independent or that percentages are calibrated. Nor do we have the subsequent outcomes needed to measure historical errors: no success rate is invented. Stage 3 is next.

Before continuing: try it

1. Is 1.857489 expected goals an exact score forecast?

Show the explanation

No: it is mean λ_H. Actual goals are integers; Poisson assigns probability to 0,1,2…

2. Shakhtar: convert P1=0.507969697712 to a percentage.

Show the explanation

0.507969697712×100%=50.7969697712%, about 50.80%. Multiplication by 100% shows the conversion.

3. Why do three Stuttgart matches not give W=3?

Show the explanation

Each match has weight below 1 because it predates cutoff. The three weights total about 1.074709. With m=8 the reference remains dominant.

Previous stage

Continue to the next stage

The predictive modelling path