London · Engineering software since 1993

Software that runs
the real world.

From football statistics to disaster rescue hardware — we design, build and run mission-critical systems. Now available as ready-to-use software and subscriptions.

33years of engineering
1993first factory robots
24/7hosted & monitored
100%in-house code
ASP.NET MVCSQL ServerMicrosoft Azure.NET ML .NET MAUISAP integrationESP32 · IoTWebGL ASP.NET MVCSQL ServerMicrosoft Azure.NET ML .NET MAUISAP integrationESP32 · IoTWebGL
Software

Ready to run. From day one.

Proven systems we built for real customers, now packaged as products.

All software →
LiveSubscriptionCloud

EFAS

European Football Analysis System. Statistical match predictions for 17 European leagues — result, over/under, both teams to score, half-time and HT/FT — with every hit rate published. £100 per season.

EFAS fixtures and predictions How it works →
LiveSubscriptionCloud

Price Tracker

Every price. Every shop. Searches the price-comparison sites of the UK and ten European countries at once, tracks the products you choose and e-mails you when the price drops. £100 per year.

Price Tracker search results How it works →
LiveSubscriptionChrome extension

IB — Investing Bot

Your rules. Every market minute. An automatic trading program for US stocks that runs in your own Chrome and trades your own Alpaca account — a weekly momentum strategy within the risk limits you set. £100 per year.

The IB panel How it works →
Free downloadWindows

MultiMonitor Desktop

Every monitor, a desk of its own. Window rules, windows that open where your mouse is, a full taskbar with its own pinned apps on every screen, and a move button in every title bar. A small, free tool for Windows 10 and 11.

MultiMonitor Desktop How it works →
LiveSubscriptionFully managed

Commerce Platform

Your online shop, built, hosted and looked after. Your own design with multi-language and multi-currency, SEO, Stripe and PayPal payments, SSL, hosting and your own mail server — all run by us. byDuygus, Gamer Bilişim and islA Boutique are live on it.

Online shops on the CPS Commerce Platform See the platform →
First 2 months freeYearly or lifetimePhones · Car screens

IP Player

Your IPTV, on every screen you own. A clean, fast player for the IPTV subscription you already have — live TV, movies and series sorted and searchable on phones, tablets and Android car screens. The first 2 months are free, then £10 a year or £50 for life.

IP Player on a car screen and phones How it works →
SubscriptionFully managed service

Managed Hosting & Backup

Your systems online. Kept safe, kept running. Your websites, web applications and databases on our Windows servers — with SSL, mail on your domain, updates, monitoring and backups looked after by us. The same platform that runs our own products.

Domain, SSL, Windows Server, SQL Server, mail and backups — managed by CPS What is included →
What we do

One team. Software, hardware
and the servers in between.

Business software

Warehouse, stock, accounting, e-commerce and B2B platforms — built around how your company actually works.

  • Stock & warehouse systems
  • B2B / B2C commerce
  • SAP & barcode integration
Software →

R&D & hardware

Embedded electronics, sensing and AI. We design the circuit boards and write the firmware ourselves.

  • Disaster black box
  • Wi-Fi motion sensing
  • Machine-learning prediction
R&D →

Infrastructure

We host what we build. Servers, databases, backups and security, run by the engineers who wrote the code.

  • Azure & IIS hosting
  • SQL Server management
  • Backup & secure data erasure
Support →
Since 1993

Three decades of
writing serious software.

  1. 1993Programming pneumatic factory robots.
  2. 1995Commercial software in COBOL.
  3. 1997Engineering & scientific software.
  4. 1999Independent, made-to-measure systems for companies.
  5. 2008C.P.S. Information Services founded.
  6. 2018Moved to London; joint projects with scientific institutions.
  7. TodaySoftware products, subscriptions and R&D.

Have a system in mind?

Tell us what your business needs. We'll tell you honestly whether to buy, subscribe or build.

EFAS — European Football Analysis Systemcps-soft.com/software/efas
Software · Subscription

Football, read by
the numbers.

EFAS is a statistical prediction system for European football. Every day it turns the results and shots of 17 leagues into probabilities for every major market — and publishes how often it was right.

The EFAS desktop
The EFAS desktop. Every tool opens in its own window — fixtures and predictions, leagues, teams, league tables and the analysis report.
17European leagues in 11 countries
58,800+matches in the database since 2016/17
11markets predicted for every match
4×automatic updates every day
01 · What EFAS is

A forecasting engine, not a tipster.

EFAS reads the match history of 17 leagues in England, Spain, Germany, Italy, France, the Netherlands, Belgium, Portugal, Turkey, Greece and Scotland, and builds a statistical picture of every team: how many goals it scores and concedes at home and away, how many shots on target it creates, how it started previous seasons and how it has played in its last ten games.

From that picture it computes the expected number of goals for both sides of every upcoming match, and from those two numbers the probability of every possible score. Two independent engines do this — a current-season model and a Dixon–Coles model that learns from four seasons of history — and each market is taken from the engine that proved stronger for it over ten seasons of blind tests. The picks are then checked against each other, so every match tells one consistent story.

EFAS provides statistical information only. It is not betting advice and gives no guarantee of any outcome.
02 · What you get

Everything on one screen.

Fixtures and predictions grid
Fixtures and Predictions. Each match has a prediction row and, once it is played, a result row underneath: probabilities for 1-X-2, the most likely score, over/under 1.5 / 2.5 / 3.5, both teams to score, half-time result, half-time score, half-time over/under and HT/FT. Ticks and crosses show at a glance what came true.
Match details
Match Details. Expected goals, probabilities, the season so far for both teams and a goal-averages table for every half.
Team statistics
Team Statistics. Position, points pace, goals per match, home vs away and comparison with the league average.
League table
League Tables. Computed from every played match, with last-five form.
Analysis report
Analysis Report. Hit rate of every market for any period and league — nothing hidden.
03 · The mathematics

From goals to probabilities, step by step.

EFAS runs two engines. Steps 1–8 describe the current-season multi-source Poisson model, step 9 the Dixon–Coles model and how the two are combined. Below is exactly what runs in production — the same formulas, the same constants. No bookmaker odds go into the probabilities; odds are used only afterwards, as a safety check on which picks are shown (step 10).

1

The league baseline

Every calculation is relative to the league. For the current season EFAS takes the average goals scored by home teams and by away teams per match. Until the league has 20 played matches, last season's final averages are used.

$$\bar h=\frac{\text{home goals}}{\text{matches}},\qquad \bar a=\frac{\text{away goals}}{\text{matches}}$$
2

Attack and defence indices with Bayesian shrinkage

For each team, goals for (GF) and against (GA) over its n matches are turned into indices relative to the league. An index of 1.20 means 20% better than average at scoring (or 20% worse at defending). Early in the season a team has played only a few games, so its numbers are noisy — EFAS adds m imaginary "league-average" matches to every team (empirical Bayes). Small samples are pulled towards the average; large samples speak for themselves.

$$A=\frac{\dfrac{GF+m\,\bar g}{n+m}}{\bar g},\qquad D=\frac{\dfrac{GA+m\,\bar c}{n+m}}{\bar c},\qquad m=4$$

Here \(\bar g\) and \(\bar c\) are the league averages that match the venue (a home team is compared with \(\bar h\) for goals scored and \(\bar a\) for goals conceded, and the other way round for an away team). For the home-venue source, a team with fewer than six home games this season is topped up with its most recent home games from last season (the "hybrid window"); the same applies to an away team's away games.

3

Six sources, blended in log space

One sample is never enough. EFAS computes the indices from up to six independent views of the same team and combines them with a weighted geometric mean (a weighted average of logarithms). If a source is not available yet, the remaining weights are re-normalised.

$$\log A=\frac{\sum_s w_s\log A_s}{\sum_s w_s},\qquad \log D=\frac{\sum_s w_s\log D_s}{\sum_s w_s}$$
SourceWhat it measuresWeight \(w_s\)
AThis season, same venue (home team at home, away team away)0.40
BThis season, all matches0.15
CForm — the last 10 matches0.10
DLast season, same venue (\(m=2\))0.15
EShots on target for and against, same venue0.20
GSeason-start habit: the first six venue matches of the last three seasons — only while either team has played fewer than six at that venue this season0.15
4

Expected goals for the match

The home side's attack meets the away side's defence, scaled by the league's home scoring level — and vice versa. The defence index is softened with the exponent \(\beta\): defensive numbers are noisier than attacking ones, and the square root was the best value in blind tests.

$$\lambda_H=A_H\cdot D_A^{\,\beta}\cdot\bar h,\qquad \lambda_A=A_A\cdot D_H^{\,\beta}\cdot\bar a,\qquad \beta=0.5$$
5

Two calibrations: total and balance

Raw totals spread too widely (the model over-reacted to high- and low-scoring teams), and shrinkage made favourites look slightly weaker than they are. Both effects were measured over ten seasons and corrected with two exponents: the total \(T=\lambda_H+\lambda_A\) is pulled towards the league total \(\bar T\), and the ratio between the sides is stretched. The total is kept fixed while the ratio changes.

$$T'=\bar T\left(\frac{T}{\bar T}\right)^{g},\qquad r=\left(\frac{\lambda_H}{\lambda_A}\right)^{k},\qquad \lambda_H'=T'\,\frac{r}{1+r},\qquad \lambda_A'=T'-\lambda_H'$$

\(g=0.5\), \(k=1.2\). \(k\) was chosen on the 2016/17–2021/22 seasons and improved the ranked probability score in each of the four later seasons the tuning never saw (2022/23–2025/26); \(g\) improved the over/under and both-teams-to-score log-loss in every test season.

6

The score grid

Goals are modelled as Poisson-distributed. The probability of every exact score \(i\!-\!j\) (up to 10 goals each) is the product of the two Poisson probabilities, normalised to sum to one. Every market is then just a sum over the right cells of this grid.

$$P(i,j)=\frac{e^{-\lambda_H'}\lambda_H'^{\,i}}{i!}\cdot\frac{e^{-\lambda_A'}\lambda_A'^{\,j}}{j!}$$
$$P(1)=\sum_{i\gt j}P(i,j),\quad P(X)=\sum_{i=j}P(i,j),\quad P(2)=\sum_{i\lt j}P(i,j)$$ $$P(\text{Over }n.5)=\sum_{i+j\gt n}P(i,j),\qquad P(\text{BTTS})=\sum_{i\ge1,\;j\ge1}P(i,j)$$
Score probability matrices
The full-time and half-time score grids of one match as EFAS shows them in Match Details (percent). The darkest cell is the most likely score.
7

Half-time and HT/FT

Half-time goal counts are small and noisy, so instead of fitting them separately EFAS derives the first-half expectations from the full-match ones with a power law fitted on 32,000 matches over ten seasons. The second half gets the remainder, and the HT/FT grid is the convolution of the half-time score grid with an independent second half.

$$\lambda_H^{HT}=0.468\,\lambda_H^{\,0.95},\qquad \lambda_A^{HT}=0.4495\,\lambda_A^{\,0.92},\qquad \lambda^{2H}=\lambda-\lambda^{HT}$$
$$P(r_1,r_2)=\sum_{i,j}P^{HT}(i,j)\sum_{k,l}\text{Pois}(k;\lambda_H^{2H})\,\text{Pois}(l;\lambda_A^{2H})\;\big[\,r(i,j)=r_1,\;r(i{+}k,\,j{+}l)=r_2\,\big]$$

\(r(\cdot)\) is the result (home win, draw, away win) of a score. In blind tests on six seasons this improved the half-time result and half-time over/under predictions in every season.

8

One story per match

The score EFAS shows is not simply the most likely cell: it is the most likely score that agrees with the result, over/under and both-teams-to-score picks. If the picks contradict each other strongly (by more than \(\varepsilon=0.12\) in probability), the match is left out rather than shown with a confusing prediction. The half-time score may never exceed the full-time score.

9

The second engine: Dixon–Coles, and how the two are combined

The second engine is a Dixon–Coles model (1997). Every team gets an attack and a defence strength, fitted by weighted maximum likelihood on the league's last four seasons; recent matches weigh more (time decay \(\xi=0.003\) per day, a half-life of about 230 days), and a correction \(\tau_\rho\) fixes the classic Poisson error on the low scores 0-0, 1-0, 0-1 and 1-1.

$$\lambda_H=e^{\,\beta+\gamma+a_H+d_A},\qquad \lambda_A=e^{\,\beta+a_A+d_H}$$
$$\max\;\sum_m e^{-\xi t_m}\,\log\!\big[\tau_\rho(x_m,y_m)\,\text{Pois}(x_m;\lambda_H)\,\text{Pois}(y_m;\lambda_A)\big]$$

\(\beta\) is the league's goal level, \(\gamma\) the home advantage, \(a\) attack and \(d\) defence (a positive \(d\) concedes more). The fitted target mixes goals and shots on target (\(\alpha=0.5\)), strengths are held to the league average by a weak prior (\(\sigma=0.6\)), the league's home and away goal levels come from its last ten seasons, 20% of the goal difference is blended in from pi-ratings, and the 1-X-2 probabilities get a light calibration (\(\tau=1.10\), draws \(\times1.05\)). Its half-time expectations use the same power law as step 7.

MarketTaken from
Match result · Over/Under 2.5 · Half-time resultDixon–Coles
Over/Under 1.5 · 3.5 · Both teams to score · HT over/under · scores · HT/FTcurrent-season model
“Strong”, “market-confirmed” and “featured” badgescurrent-season model — only when both engines show the same result pick (and, for “featured”, the same half-time pick)

If a cell from the current-season model contradicts a Dixon–Coles pick — say the score is 1-0 while the 2.5 pick is Over — that cell is shown in grey and does not count in any statistic. In a ten-season re-test of the production code the combination beat the current-season model alone in nine seasons out of ten on the match result and in eight on over/under 2.5 (section 04).

10

Only confident picks are shown

A probability is always available, but a pick is only made when the numbers are clear enough. The thresholds were set on older seasons and then checked on unseen ones:

MarketA pick is shown when…
Match resultthe highest Dixon–Coles probability is ≥ 52%; never a draw; the bookmakers' opening favourite is the same side; and our probability is at most 5 points above the bookmakers'
“Strong” result≥ 60% in the current-season model (≥ 55% when the bookmakers confirm the pick), and both engines pick the same result
Over/Under 2.5the Dixon–Coles probability is ≥ 11.5 points away from 50%, and the bookmakers give the same side ≥ 55%
Both teams to scorethe probability is ≥ 16 points away from the 43% decision threshold
Half-time resultthe highest Dixon–Coles probability is ≥ 52.5% (never a draw)
HT over/under 0.5 · 1.5≥ 20 · ≥ 15 points away from 50%
HT/FTthe most likely combination is ≥ 40%
“Featured” matcha result pick ≥ 55% together with a half-time result pick, both engines agreeing on both

The “6 + 6” badge marks matches where the home team has already played at least six home matches and the away team at least six away matches this season — their strengths have settled.

11

Tested the hard way

Every constant on this page was chosen on older seasons and judged on later seasons the tuning never saw ("blind" or walk-forward testing), using proper scoring rules such as the ranked probability score and log-loss — not just hit rates. Along the way EFAS also implemented and tested heavier models from the research literature: Dixon–Coles (1997) with time-decayed weights and a low-score correction, pi-ratings (Constantinou & Fenton, 2013), Conway–Maxwell–Poisson goal distributions and a logistic stacking layer. Pi-ratings, the Conway–Maxwell–Poisson distribution and the stacking layer remain as benchmarks. Dixon–Coles earned its place next to the multi-source model in November 2026: the production code was re-run on ten seasons (55,000 matches, every match predicted only from data before it, every pick judged by the site's own rules), and the combination was right more often than either engine alone.

04 · Honest numbers

How often it was right.

All 17 leagues. The first column is the ten-season re-test of the production code — every match predicted only from data available before it; the second is straight from the EFAS Analysis Report for the running season. “Of” is the number of matches where a pick was made in that market.

Prediction10 seasons, re-test
2016/17–2025/26 · 55,483 matches
2026/27 so far
1,482 matches, to 8 Nov
Match result67.7% of 14,79567.3% of 398
Match result — “strong”76.1% of 6,83673.9% of 153
Featured matches — result85.1% of 1,49992.3% of 26
Over/Under 1.5 (every match)74.7%78.9%
Over/Under 2.563.7% of 13,37268.3% of 344
Over/Under 3.5 (every match)71.8%65.4%
Both teams to score60.1% of 5,93961.2% of 343
Half-time result60.9% of 2,89068.2% of 66
Half-time over/under 0.573.8% of 24,02177.4% of 747
Correct score (every match)9.4%9.4%
For reference: result, every match, no filter50.0%50.9%

Past performance does not guarantee future results. The live figures for any period and league are always available in the Analysis Report inside EFAS.

05 · Data & updates

Runs by itself, every day.

06:00Results of the day before are imported, team statistics and the model are refreshed.
09:00 · 18:00New fixtures are loaded and predictions for the coming days are produced.
13:00Injury and suspension lists are refreshed.
MondaysThe running season is re-tested so the Analysis Report stays current.
Since 2016/17Results, half-time scores, shots, shots on target and opening odds; expected goals (xG) from 2026/27.
UK timeAll schedules and kick-off times are in UK time.
06 · Membership

One price. The whole season.

£100/ season

Valid until 30 June. Pay by card (Stripe, 3D Secure) or PayPal; your invoice is e-mailed instantly.

Become a member →
  • Every prediction in every market, for all 17 leagues
  • Match Details with score grids and both teams' season
  • Team statistics, league tables and the Analysis Report
  • Works on desktop and mobile
  • One active session per member

Free as a guest: every played match with all predictions and results, and the O/U 1.5 and both-teams-to-score predictions for upcoming matches.