monitoring

Winter Dip or Degradation? Why One Cold Season Can't Tell You

A January reading below last January looks like decay. Nineteen years of PVGIS data show why weather noise outweighs degradation, and what to test.

· Sarah Okonkwo · 11 min read

Bottom Line

Degradation at the NREL median of 0.5% a year is smaller than the weather noise in any single year, and far smaller in winter. In 19 modeled years for a Berlin roof, December output ranged from 17.7 to 39.2 kWh per kWp. Raw kWh comparisons need roughly 19 years to resolve the trend there. Weather-normalized comparisons need far fewer.

It's January. You open the monitoring app, pull up last January, and the new number is lower. Eight percent lower, say. The thought arrives before you've finished reading the chart: are the panels wearing out already?

Probably not. But "probably" isn't much of an answer, so I went looking for how big the weather's share of that gap really is. I pulled 19 years of hourly PVGIS output for two cities, ran the statistics myself, and cross-checked the degradation side against NREL's published studies. What follows is that arithmetic, plus a way to test your own system.

Our guide on panels in cold weather covers why winter yield falls and what the latitude does. This piece asks a narrower question: when the number drops, how do you know whose fault it is?

Why Is One Winter a Terrible Test of Panel Health?

Because winter is the noisiest season of the year, and a single sunny or gloomy month swamps anything the modules are doing.

Here is what I ran. The PVGIS hourly service (version 5.3, SARAH3 radiation database) returns modeled output for every year from 2005 to 2023 at a chosen location. I requested 1 kWp, south-facing, 35 degree tilt, 14% system losses for Berlin (52.52 N, 13.405 E) and Madrid (40.4168 N, 3.7038 W), then summed the hours. These are model outputs from satellite data, not metered roofs. The ground truth for your own house will differ, and my 19-year averages sit a few percent away from the typical-year monthly figures in our winter guide; I haven't reconciled the two beyond noting that they come from different averaging.

Modeled 1 kWp, 2005-2023BerlinMadrid
Annual mean1,031 kWh1,611 kWh
Annual standard deviation60.6 kWh (5.9%)50.7 kWh (3.1%)
Worst-to-best annual range929 to 1,168 kWh1,536 to 1,697 kWh
December mean26.2 kWh100.0 kWh
December standard deviation5.6 kWh (21%)13.3 kWh (13%)
December range17.7 to 39.2 kWh63.7 to 114.7 kWh
Dec-Feb season standard deviation12.4%10.5%

Read the Berlin December line twice. The darkest December in the series gave 17.7 kWh per kWp. The brightest gave 39.2. Same roof, same panels, a factor of 2.2. And December-to-December changes between neighbouring years ran from minus 28% to plus 92%, with 9 of 18 pairs moving by more than 20%.

So an 8% dip in January is comfortably inside the range a healthy system produces by chance. It isn't evidence of anything.

A panel that loses half a percent a year is invisible inside a winter that swings by a fifth, so the January-versus-January comparison in your app measures the sky, not the modules.

Share Post on X Bluesky

How Big Is Degradation Next to the Weather?

Small. That's the uncomfortable part.

NREL's analytical review of the degradation literature (Jordan and Kurtz, 2013) assembled nearly 2,000 reported rates and found a median of 0.5% per year. NREL's later fleet work, using inverter data from many real systems and the RdTools toolkit, reported a fleet median around 0.72% per year in its March 2020 methodology report. Take either number. Over ten years you've lost something between 5% and 7%.

Now set that against the chart below. The shaded band is one standard deviation of annual output for the Berlin roof, 5.9%. Ten years of median degradation is about the same size as that band. In other words, a decade of slow wear is no larger than the difference weather makes between two neighbouring calendar years.

Berlin, 1 kWp, one calendar year at a time PVGIS 5.3 (SARAH3), 35 deg tilt, south, 14% losses. Modeled kWh per year, 2005-2023 2005 2007 2009 2011 2013 2015 2017 2019 2021 2023 mean 1031, band = +/-1 SD (61 kWh, 5.9%) Ten years of degradation at 0.5% a year is about 5% Weather moved this roof by more than that between neighbouring years Source: my own run of the PVGIS hourly API. Yellow bar = 5% of the mean, to scale. Axis starts at 800 kWh.
Annual modeled output for the same Berlin array in each of 19 years. Weather alone moves the total by more than ten years of median degradation would.

Solargis, a vendor of solar resource data, makes the same point about Central Europe: its variability map puts Germany above 5% relative standard deviation in annual irradiation, with swings as large as plus or minus 12% in places. It's a commercial source, so I'd treat the exact numbers as indicative. My Berlin run, 5.9%, lands in the same neighbourhood.

How Long Until the Trend Shows?

You can estimate it. Fit a straight line to annual totals; the standard error of the slope is the yearly noise divided by the square root of n(n^2 - 1)/12, where n is the number of years. To tell a 0.5% per year slope from zero at two standard errors, Berlin's 5.9% noise needs n of about 19 years. Madrid's 3.1% needs about 13. That assumes each year is independent of the last, which real weather isn't quite, so treat it as an order of magnitude.

I also tried it the practical way. I took the real Berlin weather series, multiplied it by a synthetic panel losing exactly 0.5% a year, and asked what a raw-kWh trend line would conclude over rolling windows. Synthetic, so labeled as such: the weather is real, the panel is invented.

WindowBerlin: estimated loss per yearMadrid: estimated loss per year
5 yearsminus 2.6% to plus 3.0%minus 0.9% to plus 1.9%
10 yearsminus 0.5% to plus 0.7%plus 0.0% to plus 0.8%
15 yearsminus 0.2% to plus 0.1%plus 0.5%

Over five years the Berlin roof could "improve" by 2.6% a year or "collapse" by 3.0%, for a panel that did neither. Even at ten years the answer straddled zero. (The windows overlap heavily inside a 19-year record, so don't read them as independent trials, and the 15-year row has only five windows.) The real series also carries a slow brightening trend over those years, which masks wear in the raw figures. I didn't try to separate that out.

What Does Winter Add on Top of the Weather?

Several things that look like decay and aren't.

  • Low sun angle. A tree, chimney or neighbouring ridge that never touches the array in June can shade it for hours in December. Anything that shows only in winter and clears by April is a shading story. Our piece on checking panels are working shows how to read the production curve for this.
  • Snow and frost. A covered string reports almost nothing, then recovers fully when it slides off.
  • Batteries. Lithium cells charge badly below freezing, so battery management systems cut charge current, and an owner sees a pack that fills slower than the spreadsheet predicted. That reverses by afternoon. The published temperature bands for Powerwall 3, the Enphase IQ Battery 5P and others are tabulated in the battery sizing guide, and none of it is aging.
  • Counters that mix sources. On a DC-coupled hybrid inverter, the "total yield" counter can rise when the battery discharges. The Huawei Solar integration for Home Assistant documents exactly this for SUN2000 inverters such as the SUN2000-15K-MB0: daily and total yield reflect inverter output, not solar input. A winter of heavy battery cycling then inflates a number you might be using as a panel health check.

What actually wears out slowly, the encapsulant and cell physics, is in the aging and end-of-life guide.

Which Methods Separate Weather From a Real Problem?

Three, in rising order of effort.

1. Compare against a model for the same year. PVGIS lets you request hourly modeled output for any past year at your coordinates, tilt and azimuth. Sum it by month and put your meter data beside it. A healthy system follows the model month by month, cloudy Decembers included. The catch: the SARAH3 database I used ends at 2023, so recent months need another route. Check the tool's current end year before planning around it.

2. Track a performance ratio. Divide your measured energy by what the measured irradiance on the array plane should have produced (the definition lives in IEC 61724-1). It needs an irradiance sensor or a trusted nearby reference, and it cancels most of the sky. A ratio that slips from season to season is your system.

3. Let a library do the statistics. NREL's RdTools describes year-on-year as its preferred degradation method: compare each day with the same day a year later, take the median of all those slopes, and report a confidence interval. Its function returns a degradation rate in percent per year along with an interval at a default 68.2% confidence level. It expects normalized input, so it solves the weather problem only if you've already done method 2.

The thresholds I'd pay attention to: a stable gap of 10 to 15% against the model across several months suggests soiling, shading or a lost string; a drop to half of modeled output suggests an offline string or inverter fault. Those echo the same-month tolerances in that monitoring guide, only measured against a model instead of last year.

What Would I Do With My Own Numbers?

Here's my opinion, and monitoring-app designers will dislike it: the "vs last year" arrow in most apps should be hidden for any period shorter than a full year, and it shouldn't be trusted for winter at all. It teaches owners to worry about the wrong thing.

If I owned a system, I wouldn't try to measure degradation before year five. I'd look for faults instead, because those are large, fast and fixable: a string at half its neighbour's current (the inverter data guide shows where to look), a winter-only shadow, a battery living on an exposed north wall. Warranty claims deserve normalized data and a few years of it. A one-winter dip won't get anyone a replacement panel, and it shouldn't.

One number surprised me while I was building the table: Berlin's best December in 19 years, 39.2 kWh per kWp, still fell short of Madrid's worst, 63.7. Latitude sets the baseline. Weather decides which side of it you land on.

Summary

Degradation at the NREL median of 0.5% a year (0.72% for the NREL fleet study) is smaller than the weather noise in any single year, and much smaller than winter noise. In a 19-year PVGIS run for Berlin, annual output varied by 5.9% (one standard deviation) and December by 21%, so ten years of median degradation hides inside the spread between neighbouring years. Resolving a 0.5% trend from raw kWh takes about 19 years in Berlin and 13 in Madrid. Compare your system with a modeled figure for the same year, track a performance ratio, or use a year-on-year method such as RdTools on normalized data. Treat a winter-only dip as shading, snow, cold-limited battery charging or a mixed yield counter until normalized data says otherwise.

Frequently Asked Questions

Is a lower January output than last January a sign of degradation?
Almost never on its own. In the 19 PVGIS years I ran for Berlin, December-to-December changes exceeded 20% in 9 of 18 year pairs, while a panel losing 0.5% a year changes by half a percent. A single winter comparison measures cloud and snow cover far more than it measures the modules.
How many years of data do I need to see 0.5% annual degradation?
From raw monthly or annual kWh alone, roughly 19 years for a Berlin roof and 13 for a Madrid roof, assuming independent years and a two standard error test. Weather-normalized data, meaning output divided by measured or modeled irradiance, shortens that considerably, which is why fleet studies use methods such as RdTools.
Does cold weather damage solar panels or batteries permanently?
Cold does not degrade crystalline silicon panels, and output per unit of light usually rises. Lithium batteries are different: charging below freezing can harm cells, so battery management systems cut charge current, which looks like lost capacity but reverses when the pack warms. Check the datasheet temperature bands.
What is the cheapest way to separate weather from a real fault?
Compare your monthly kWh with a modeled figure for the same year. The PVGIS hourly tool returns output for each past year at your coordinates, tilt and orientation, so a healthy system tracks the model month by month. A steady gap that widens over seasons points to the system, not the sky.

Sources