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

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
| Quantity | Result ≈ |
|---|---|
| Calculated | 2026-11-03T15:15:39Z |
| Kickoff | 2026-11-03T17:45:00Z |
| cutoff | 2026-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 date | Opponent | GF | GS | Age d (days) | w ≈ | w×GF ≈ | w×GS ≈ |
|---|---|---|---|---|---|---|---|
| 2026-10-14T19:00:00Z | AEK Athens FC | 3 | 1 | 19.677535 | 0.927025136 | 2.781075408 | 0.927025136 |
| 2025-01-22T17:45:00Z | Stade Brestois 29 | 2 | 0 | 649.729618 | 0.081921788 | 0.163843576 | 0 |
| 2024-12-10T20:00:00Z | Bayern München | 1 | 5 | 692.635868 | 0.069445401 | 0.069445401 | 0.347227003 |
| 2024-11-06T17:45:00Z | BSC Young Boys | 2 | 1 | 726.729618 | 0.060901148 | 0.121802296 | 0.060901148 |
Away · Sporting CP
| UTC date | Opponent | GF | GS | Age d (days) | w ≈ | w×GF ≈ | w×GS ≈ |
|---|---|---|---|---|---|---|---|
| 2026-10-13T16:45:00Z | Lens | 2 | 0 | 20.771285 | 0.923128873 | 1.846257746 | 0 |
| 2026-04-15T19:00:00Z | Arsenal | 0 | 0 | 201.677535 | 0.459956475 | 0 | 0 |
| 2026-03-11T20:00:00Z | Bodo/Glimt | 0 | 3 | 236.635868 | 0.402024767 | 0 | 1.206074302 |
| 2026-01-28T20:00:00Z | Athletic Club | 3 | 2 | 278.635868 | 0.341989267 | 1.025967802 | 0.683978535 |
| 2025-12-09T17:45:00Z | Bayern München | 1 | 3 | 328.729618 | 0.281991649 | 0.281991649 | 0.845974947 |
| 2025-11-04T20:00:00Z | Juventus | 1 | 1 | 363.635868 | 0.246524124 | 0.246524124 | 0.246524124 |
| 2025-10-01T19:00:00Z | Napoli | 1 | 2 | 397.677535 | 0.216236259 | 0.216236259 | 0.432472518 |
| 2025-02-19T17:45:00Z | Borussia Dortmund | 0 | 0 | 621.729618 | 0.091248621 | 0 | 0 |
| 2025-01-22T17:45:00Z | RB Leipzig | 1 | 2 | 649.729618 | 0.081921788 | 0.081921788 | 0.163843576 |
| 2024-12-10T20:00:00Z | Club Brugge KV | 1 | 2 | 692.635868 | 0.069445401 | 0.069445401 | 0.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.
| Quantity | Substitution | Adjusted mean ≈ | Result ≈ |
|---|---|---|---|
| Home attack | (3.136166679977+8×2.0003209475)/(1.139293472263+8) = (3.136166679977+16.00256758)/9.139293472263 | 2.094115296556 | 2.094115296556/2.0003209475 = 1.04688964997 |
| Home conceded | (1.335153286442+8×1.346459586694)/(1.139293472263+8) = (1.335153286442+10.771676693552)/9.139293472263 | 1.324700866291 | 1.324700866291/1.346459586694 = 0.983840049402 |
| Away attack | (3.768344768108+8×1.346459586694)/(3.114467223228+8) = (3.768344768108+10.771676693552)/11.114467223228 | 1.308206787571 | 1.308206787571/1.346459586694 = 0.97159008744 |
| Away conceded | (3.717758802119+8×2.0003209475)/(3.114467223228+8) = (3.717758802119+16.00256758)/11.114467223228 | 1.774293448894 | 1.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
| k | Substitution | P(G=k) ≈ |
|---|---|---|
| 0 | exp(−1.857489447656) | 0.156063945658 |
| 1 | 0.156063945658 × 1.857489447656 / 1 | 0.28988713222 |
| 2 | 0.28988713222 × 1.857489447656 / 2 | 0.269231144555 |
| 3 | 0.269231144555 × 1.857489447656 / 3 | 0.16669800333 |
| 4 | 0.16669800333 × 1.857489447656 / 4 | 0.077409945533 |
Away
| k | Substitution | P(G=k) ≈ |
|---|---|---|
| 0 | exp(−1.287066230512) | 0.276079549902 |
| 1 | 0.276079549902 × 1.287066230512 / 1 | 0.355332665613 |
| 2 | 0.355332665613 × 1.287066230512 / 2 | 0.228668337254 |
| 3 | 0.228668337254 × 1.287066230512 / 3 | 0.098103764956 |
| 4 | 0.098103764956 × 1.287066230512 / 4 | 0.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.
| i | j<i → 1 | j=i → X | j>i → 2 |
|---|---|---|---|
| 0 | 0 | 0.043086063873 | 0.112977881785 |
| 1 | 0.080031908986 | 0.103006367419 | 0.106848855816 |
| 2 | 0.169995833469 | 0.061564638162 | 0.037670672923 |
| 3 | 0.14337371085 | 0.016353701737 | 0.006970590743 |
| 4 | 0.074172995846 | 0.002443561877 | 0.00079338781 |
| 5 | 0.028462889497 | 0.000233674102 | 0.000061067795 |
| 6…30 | 0.011932359064 | 0.000016304246 | 0.000003534 |
| Σ | 0.507969697712 | 0.226704311417 | 0.265325990872 |
I. Convert probabilities to percentages
| Event | p ≈ | p × 100% |
|---|---|---|
| 1 | 0.507969697712 | 0.507969697712 × 100% ≈ 50.797% |
| X | 0.226704311417 | 0.226704311417 × 100% ≈ 22.6704% |
| 2 | 0.265325990872 | 0.265325990872 × 100% ≈ 26.5326% |
| 1X | 0.734674009128 | 0.734674009128 × 100% ≈ 73.4674% |
| X2 | 0.492030302288 | 0.492030302288 × 100% ≈ 49.203% |
| 12 | 0.773295688583 | 0.773295688583 × 100% ≈ 77.3296% |
| Over 2.5 | 0.608404945738 | 0.608404945738 × 100% ≈ 60.8405% |
| Under 2.5 | 0.391595054262 | 0.391595054262 × 100% ≈ 39.1595% |
| GG | 0.610942568313 | 0.610942568313 × 100% ≈ 61.0943% |
| No GG | 0.389057431687 | 0.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
| Quantity | Result ≈ |
|---|---|
| Calculated | 2026-11-03T15:09:56Z |
| Kickoff | 2026-11-03T17:45:00Z |
| cutoff | 2026-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 date | Opponent | GF | GS | Age d (days) | w ≈ | w×GF ≈ | w×GS ≈ |
|---|---|---|---|---|---|---|---|
| 2026-10-13T19:00:00Z | Barcelona | 1 | 4 | 20.673565 | 0.923476313 | 0.923476313 | 3.693905253 |
| 2026-03-10T17:45:00Z | Liverpool | 1 | 0 | 237.725648 | 0.400341188 | 0.400341188 | 0 |
| 2026-02-17T17:45:00Z | Juventus | 5 | 2 | 258.725648 | 0.36924116 | 1.846205801 | 0.738482321 |
| 2026-01-21T17:45:00Z | Atletico Madrid | 1 | 1 | 285.725648 | 0.332778767 | 0.332778767 | 0.332778767 |
| 2025-11-25T17:45:00Z | Union St. Gilloise | 0 | 1 | 342.725648 | 0.267195686 | 0 | 0.267195686 |
| 2025-10-22T16:45:00Z | Bodo/Glimt | 3 | 1 | 376.767315 | 0.234368121 | 0.703104363 | 0.234368121 |
| 2025-09-30T19:00:00Z | Liverpool | 1 | 0 | 398.673565 | 0.215408467 | 0.215408467 | 0 |
Away · VfB Stuttgart
| UTC date | Opponent | GF | GS | Age d (days) | w ≈ | w×GF ≈ | w×GS ≈ |
|---|---|---|---|---|---|---|---|
| 2026-10-14T19:00:00Z | Slovan Bratislava | 3 | 0 | 19.673565 | 0.927039308 | 2.781117924 | 0 |
| 2025-01-21T20:00:00Z | Slovan Bratislava | 3 | 1 | 650.631898 | 0.081637643 | 0.24491293 | 0.081637643 |
| 2024-11-27T17:45:00Z | FK Crvena Zvezda | 1 | 5 | 705.725648 | 0.066031671 | 0.066031671 | 0.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.
| Quantity | Substitution | Adjusted mean ≈ | Result ≈ |
|---|---|---|---|
| Home attack | (4.42131489829+8×2.0003209475)/(2.74280970149+8) = (4.42131489829+16.00256758)/10.74280970149 | 1.901167668963 | 1.901167668963/2.0003209475 = 0.950431315204 |
| Home conceded | (5.266730146814+8×1.346459586694)/(2.74280970149+8) = (5.266730146814+10.771676693553)/10.74280970149 | 1.492943399914 | 1.492943399914/1.346459586694 = 1.108791837993 |
| Away attack | (3.092062523618+8×1.346459586694)/(1.074708621543+8) = (3.092062523618+10.771676693553)/9.074708621543 | 1.527733814423 | 1.527733814423/1.346459586694 = 1.134630277448 |
| Away conceded | (0.411795995708+8×2.0003209475)/(1.074708621543+8) = (0.411795995708+16.00256758)/9.074708621543 | 1.80880337433 | 1.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
| k | Substitution | P(G=k) ≈ |
|---|---|---|
| 0 | exp(−1.71914337001) | 0.179219607064 |
| 1 | 0.179219607064 × 1.71914337001 / 1 | 0.308104199259 |
| 2 | 0.308104199259 × 1.71914337001 / 2 | 0.264837645714 |
| 3 | 0.264837645714 × 1.71914337001 / 3 | 0.151764627586 |
| 4 | 0.151764627586 × 1.71914337001 / 4 | 0.065226288329 |
Away
| k | Substitution | P(G=k) ≈ |
|---|---|---|
| 0 | exp(−1.693938784058) | 0.183794170876 |
| 1 | 0.183794170876 × 1.693938784058 / 1 | 0.31133607433 |
| 2 | 0.31133607433 × 1.693938784058 / 2 | 0.263692125592 |
| 3 | 0.263692125592 × 1.693938784058 / 3 | 0.148892772864 |
| 4 | 0.148892772864 × 1.693938784058 / 4 | 0.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.
| i | j<i → 1 | j=i → X | j>i → 2 |
|---|---|---|---|
| 0 | 0 | 0.032939519085 | 0.146280087979 |
| 1 | 0.056627755846 | 0.095923951882 | 0.155552491531 |
| 2 | 0.131129128462 | 0.069835601735 | 0.063872915517 |
| 3 | 0.115162394508 | 0.022596656224 | 0.014005576854 |
| 4 | 0.059206889681 | 0.004112766034 | 0.001906632614 |
| 5 | 0.021771113263 | 0.000479075326 | 0.000176479637 |
| 6…30 | 0.008367364113 | 0.000041165358 | 0.00001243435 |
| Σ | 0.392264645874 | 0.225928735645 | 0.381806618481 |
I. Convert probabilities to percentages
| Event | p ≈ | p × 100% |
|---|---|---|
| 1 | 0.392264645874 | 0.392264645874 × 100% ≈ 39.2265% |
| X | 0.225928735645 | 0.225928735645 × 100% ≈ 22.5929% |
| 2 | 0.381806618481 | 0.381806618481 × 100% ≈ 38.1807% |
| 1X | 0.618193381519 | 0.618193381519 × 100% ≈ 61.8193% |
| X2 | 0.607735354126 | 0.607735354126 × 100% ≈ 60.7735% |
| 12 | 0.774071264355 | 0.774071264355 × 100% ≈ 77.4071% |
| Over 2.5 | 0.662776829636 | 0.662776829636 × 100% ≈ 66.2777% |
| Under 2.5 | 0.337223170364 | 0.337223170364 × 100% ≈ 33.7223% |
| GG | 0.669925741146 | 0.669925741146 × 100% ≈ 66.9926% |
| No GG | 0.330074258854 | 0.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.