AI Solar Panel
012 Sizing From Your Own Consumption Data 1,522 words · 7 min

Self-Consumption Rate: The Metric That Decides Your Payback

Every solar quote you get will lead with two numbers: the array size in kWp and the estimated annual yield in kWh. Both are nearly irrelevant to what you actually earn. The number that decides your payback is the fraction of those generated kWh that get consumed inside your house instead of being pushed onto the grid, and almost nobody puts it on the front page of a quote.

Here’s why it dominates. A kWh you use yourself is worth whatever you’d otherwise have paid to import it, call it 26p on a standard variable tariff in 2026. A kWh you export is worth your SEG rate, which for the default supplier offers sits around 4p, and reaches 15p only if you’re on one of the better export tariffs and eligible for it. So the same physical kWh is worth either 26p or 4p depending on a timing question: was anything switched on when the sun hit the roof?

That 22p spread is the entire game. Yield sets the size of the pot. Self-consumption rate decides whether you collect 26p or 4p from it.

The maths that nobody shows you

Take a household using 4,250 kWh a year, typical for a three-bed with gas heating and one person home part of the week. Model a south-facing 4 kWp array in the Midlands, roughly 3,620 kWh a year.

At a 35% self-consumption rate: 1,267 kWh saved at 26p is £329, plus 2,353 kWh exported at 4.1p is £96. Annual value £425.

At a 65% self-consumption rate: 2,353 kWh saved at 26p is £612, plus 1,267 kWh exported at 4.1p is £52. Annual value £664.

Identical panels, identical inverter, identical roof, identical weather. A £239 a year difference, which on a £5,900 install is the difference between a 13.9-year payback and an 8.9-year one. No amount of panel-efficiency shopping gets you a five-year swing. Load timing does.

Why bigger arrays don’t fix this

The intuition most people bring is that if returns are disappointing, add more kWp. Run the numbers and that intuition collapses, because your consumption doesn’t grow with your array. Every extra panel lands its output into the same fixed midday demand, so each additional kWp has a lower self-consumption rate than the one before it.

Modelled against that same 4,250 kWh load profile:

kWpGenerationSelf-consumedSCRInstall costAnnual value (4.1p export)Payback
21,8101,12161.9%£4,000£32012.5 yr
32,7151,47954.5%£5,000£43511.5 yr
43,6201,75548.5%£5,900£53311.1 yr
54,5251,97143.6%£6,700£61710.9 yr
65,4302,14239.4%£7,400£69210.7 yr
87,2402,38933.0%£9,200£82011.2 yr

Look at the payback column. It moves by about 1.8 years across a fourfold change in system size. Now go back to the previous section: moving self-consumption from 35% to 65% on a fixed 4 kWp array moved payback by five years. The lever you’re not being sold is roughly three times stronger than the one you are.

Sizing still matters, of course, and there’s a real question about where your particular curve flattens. That’s a separate piece of work, and we cover the full method in Sizing From Your Own Consumption Data. But sizing is an optimisation within a band. Self-consumption is the band.

Calculating your own solar self consumption rate UK-style, from half-hourly data

You need two time series at the same resolution: what your house drew, and what the roof would have produced.

Your load. If you don’t have solar yet, your half-hourly import is your consumption, which makes this easy. Octopus customers can pull it straight from the REST API at api.octopus.energy/v1/electricity-meter-points/{MPAN}/meters/{serial}/consumption/ with an API key from the dashboard. Anyone with a DCC-connected SMETS2 meter can register free at n3rgy (data.n3rgy.com) using their MPAN and get thirteen months of half-hourly data via a plain JSON endpoint. Hildebrand’s Bright app plus a Glow CAD gives you the same thing at higher resolution if you’d rather not wait for DCC latency. Pull a full twelve months, not a summer sample.

Your generation. PVGIS (the JRC’s free tool at re.jrc.ec.europa.eu/pvg_tools/en/) will give you hourly output for a 1 kWp system at your exact lat/long, tilt and azimuth, for a specific historical year or a TMY composite. No account needed, CSV download. Two gotchas that will silently wreck your model: PVGIS azimuth is 0 for south with positive running west, not the compass bearing you’d expect, and the default 14% system loss is a guess you should adjust for your shading and cable runs. Solcast’s hobbyist tier is the alternative if you want satellite-derived irradiance for a real past year.

Then the calculation itself is one line of logic. For each half-hour interval, self-consumed energy is min(generation, load). Sum those minima over the year, divide by total generation, and that’s your rate.

import pandas as pd

load = (pd.read_csv("octopus_import.csv", parse_dates=["interval_start"])
          .set_index("interval_start")["consumption"].tz_convert("UTC"))

pv = (pd.read_csv("pvgis_hourly.csv", skiprows=10, parse_dates=["time"],
                  date_format="%Y%m%d:%H%M")
        .set_index("time")["P"].tz_localize("UTC") / 1000)   # W -> kW
pv_hh = pv.resample("30min").ffill() / 2                     # kW -> kWh per HH

def metrics(kwp):
    df = pd.concat([(pv_hh * kwp).rename("gen"), load.rename("load")],
                   axis=1).dropna()
    s = df[["gen", "load"]].min(axis=1).sum()
    return {"kWp": kwp, "gen": round(df.gen.sum()), "self": round(s),
            "scr_%": round(100 * s / df.gen.sum(), 1),
            "cover_%": round(100 * s / df.load.sum(), 1)}

print(pd.DataFrame([metrics(k) for k in (2, 3, 4, 5, 6, 8)]))
   kWp   gen  self  scr_%  cover_%
0    2  1810  1121   61.9     26.4
1    3  2715  1479   54.5     34.8
2    4  3620  1755   48.5     41.3
3    5  4525  1971   43.6     46.4
4    6  5430  2142   39.4     50.4
5    8  7240  2389   33.0     56.2

Paste your two CSVs into Claude or ChatGPT’s code interpreter and ask it to run exactly this and sweep the kWp range; it takes about ninety seconds and you get a table for your house rather than for a representative one.

Two honesty notes on the method. Timezones are where these models go wrong: Octopus timestamps are UTC, PVGIS is UTC, your intuition about when the sun was overhead is BST for seven months of the year, and if you localise one series and not the other you’ll get a plausible-looking answer that’s an hour out and wrong by several points. And min() on half-hourly averages is mildly optimistic, because within a single 30-minute block a passing cloud and a kettle don’t necessarily coincide. Expect your real rate to land two to four percentage points below the model.

What actually moves the number

Once you have a baseline, you can price interventions in the same units. On that 4 kWp array sitting at 48.5%:

Load shifting costs nothing and is the highest-return move available. Dishwasher and washing machine on delay start for 11am, immersion on a timer for 1pm, robot vacuum at noon. Three appliances moved is typically 350 to 500 kWh a year relocated into daylight, worth £80 to £115 at a 22p spread.

A solar diverter such as a myenergi Eddi or a Solic 200 dumps surplus into the hot water cylinder instead of the grid. Around £500 fitted, and in a household with a cylinder it commonly captures 600 to 900 kWh a year, which pays for itself in roughly three years and is the single best-value box on this list.

Home charging changes everything. A Zappi in eco+ mode or an EV on Intelligent Octopus Go shifts the biggest single load in most modern households into whichever window you choose. Put a car on the roof’s output during summer weekends and self-consumption rates north of 70% stop being unusual.

Batteries are the expensive answer. A 5 kWh usable pack lifts that 4 kWp array from 48.5% to around 78%, capturing an extra 1,060 kWh a year, worth £233 on a flat 26p tariff against a £3,500 installed cost. Fifteen-year payback, so it doesn’t stand up on self-consumption alone. Put it on Intelligent Octopus Go at 7p overnight and let it arbitrage as well as store solar, and the same box looks completely different.

Array orientation deserves a mention here too, because it’s the one decision that’s free at design time and impossible to change later. An east-west split of the same 4 kWp generates about 15% less than due south, roughly 3,080 kWh. But the production curve is wider and flatter, matching breakfast and evening load rather than peaking into an empty house, and self-consumption comes in near 56%. Self-consumed energy: 1,725 kWh against the south-facing array’s 1,755. You gave up 540 kWh of yield and lost 30 kWh of value.

Push on that last example for a while. It’s the clearest demonstration that yield and returns are different quantities, and it’s the reason the headline kWp on your quote tells you almost nothing about what the system will pay you.