Learning a wind turbine’s power curve from scarce data
Why a measured power curve is a band, and how a turbine’s theoretical curve can narrow it when records are few
- Analyst · L2
- Case file
- 10 min
- After lesson 5
- Completed
1 · The puzzle
The theoretical curve of a turbine type covers every wind speed but not how a turbine actually operates. Measured records show real behaviour, including scatter, stops and curtailment, but they are noisy.
Words first: a power curve gives a turbine's output at each wind speed. Measured points scatter, so a fit allows many plausible curves, a band; a theoretical curve is extra information covering every speed.
2 · The question in one sentence
Can multi-fidelity Gaussian process regression, combining a theoretical power curve with limited measured data, improve probabilistic wind turbine power-curve estimation?
Question type: predictive (what power, with what uncertainty?), with an evaluative part (better than records alone?).
3 · Scale and boundary
- Inside: one wind farm's measured operating records (SCADA) from the open SDWPF dataset, and the theoretical power curve of the turbine type; point scores for nine test turbines, probabilistic scores for one.
- Left out: other wind farms, other datasets and other theoretical curves.
4 · Decisions, goal and rules, in words
- Decisions: which few hundred measured points to train on, drawn from a kernel density estimate of the records, and how to link the theoretical curve to them: a linear or a nonlinear multi-fidelity model.
- Goal: a power curve given as a probability distribution, not a single line.
- Rules: every model is scored on the same turbines, with point metrics (such as RMSE) and probabilistic metrics (pinball loss, sharpness, reliability).
Scores: RMSE, the typical size of a miss; pinball loss, a charge for misses and for width; sharpness, how narrow a band is; reliability, whether a 90% band holds about 90% of new measurements.
5 · Data and method
- Linear (autoregressive) and nonlinear multi-fidelity Gaussian process regression fuse the turbine type's theoretical power curve (low fidelity) with a few hundred kernel-density-sampled SCADA points from the open SDWPF dataset (high fidelity), and are compared with single-fidelity regression on point and probabilistic metrics.
- The kernel density sample keeps the shape of the scatter without manual cleaning; a compact training set matters because a Gaussian process solve grows with the cube of the training points.
6 · What came out, and where it holds
In the reported nine-turbine test, nonlinear multi-fidelity regression achieved lower RMSE for most turbines; performance depended on the evaluation metric.
The probabilistic multi-fidelity model was also able to generate confidence intervals that encompassed the measured power.
Holds when: one wind farm in one open dataset, one generic theoretical curve, and about two hundred sampled measurements; probabilistic scores for one turbine. Leaves out: other wind farms and datasets.
Related project · uncertainty at plants without measurements
Question and method only: no results.
The studies in time
- 2022 · Related research project, 2022–2023. A research project asks whether uncertainty metrics of a wind power model's inputs can predict calibrated plant-level power uncertainty at plants without power measurements. Source: wind-uq-surrogate on GitHub, as of 5 November 2026
This work was developed based upon funding from the Alliance for Sustainable Energy, LLC, Managing and Operating Contractor for the National Renewable Energy Laboratory for the U.S. Department of Energy.
- August 2023 · Conference paper (this case). A turbine type's theoretical power curve and measured records, condensed by kernel density sampling, are fused by multi-fidelity Gaussian process regression; presented at ASME IDETC 2023 (20–23 August 2023), online in November 2023. Source: Li et al. (2023), ASME IDETC 2023, V03AT03A034
- 30 October 2026 · Code released. A documented, runnable implementation of the method, with synthetic examples (version 1.0.1). Source: mfgpr-wind-power-curve on GitHub, as of 5 November 2026
- 2 November 2026 · Code released. A documented, runnable framework for the uncertainty metrics and the surrogate workflow, implemented afresh and tested on synthetic data (version 1.0.0). Source: wind-uq-surrogate on GitHub, as of 5 November 2026
This work was developed based upon funding from the Alliance for Sustainable Energy, LLC, Managing and Operating Contractor for the National Renewable Energy Laboratory for the U.S. Department of Energy.
Every result about the studies is quoted from approved excerpts of the published paper and the public framework named in the sources. The toy below uses lesson M9's illustrative turbine.
The idea behind it, then where the result holds
From a band on the curve to a band on the capacity factor (illustrative)
Lesson M9's toy turbine and records: invented round numbers, not the study's data. The maker's curve gives a capacity factor of 32.4%; the field curve, hidden from the fits, 31.3%.
The band is the fitted curve's uncertainty only: the expected capacity factor, with the wind-speed mix and the fit's settings held fixed. It leaves out year-to-year weather and operating changes.
90% band: if the fitted model is right, the expected capacity factor lies inside it with probability 0.9.
| Records | One source | Two sources |
|---|---|---|
| 16 | 31.3% ± 2.8 | 31.0% ± 1.5 |
| 24 | 31.1% ± 1.4 | 31.3% ± 1.2 |
| 32 | 31.0% ± 1.3 | 31.1% ± 1.0 |
| 48 | 31.1% ± 0.9 | 31.2% ± 0.9 |
| 64 | 31.0% ± 0.8 | 31.2% ± 0.8 |
How the capacity factor is averaged (the maker's curve)
Capacity factor = the sum, over wind speeds, of share of the year's hours × power, divided by the 2,000 kW rating. Every curve on this page is averaged the same way.
The wind-speed mix is an illustrative Weibull (k = 2, c = 8 m/s), the same for every curve; output below 3 m/s and above 20 m/s (0.2% of hours) counts as zero.
| Wind speed | Share of the year's hours | Maker's curve, mean power | Adds to the capacity factor, points |
|---|---|---|---|
| below 3 m/s | 13.1% | 0 kW | 0.0 |
| 3–5 m/s | 18.7% | 56 kW | 0.5 |
| 5–7 m/s | 21.2% | 253 kW | 2.7 |
| 7–9 m/s | 18.4% | 637 kW | 5.9 |
| 9–11 m/s | 13.2% | 1,268 kW | 8.4 |
| 11–13 m/s | 8.1% | 1,952 kW | 7.9 |
| 13–15 m/s | 4.2% | 2,000 kW | 4.2 |
| 15–20 m/s | 2.8% | 2,000 kW | 2.8 |
| above 20 m/s | 0.2% | counted as 0 | 0.0 |
| All hours | 100% | 32.4 |
Add measured points one by one
- A Gaussian process fitted to a few measured points is uncertain wherever the points are sparse, so its band widens between them.
- A multi-fidelity model also learns from the turbine's theoretical power curve, which covers every wind speed, and uses it to fill in the shape between measurements, so the band can narrow there.
- In the paper's test, the result depended on the evaluation metric.
A separate example with synthetic numbers, from the course author's open explainer: not the study's data or results.
Text version of the explainer: its synthetic turbine at the slider's start, 5 measured points
From the explainer's own synthetic data: estimates and 95% bands of the curve at each region's centre, in kW.
| Wind speed | Points there | True curve (hidden) | Data only, 95% band | Curve + data, 95% band |
|---|---|---|---|---|
| 0–5 m/s | 1 | 8 kW | 93 kW ± 236 | 71 kW ± 136 |
| 5–10 m/s | 2 | 360 kW | 481 kW ± 142 | 417 kW ± 128 |
| 10–15 m/s | 2 | 1,745 kW | 1,794 kW ± 112 | 1,741 kW ± 93 |
| 15–20 m/s | 0 | 1,877 kW | 1,243 kW ± 781 | 1,811 kW ± 227 |
Where the result holds
- It holds when
- one wind farm's records from one open dataset;
- one generic theoretical curve for the turbine type;
- about two hundred sampled measurements;
- point scores for nine test turbines and probabilistic scores for one;
- which model ranks first depends on the metric.
- It leaves out
- other wind farms, datasets and theoretical curves.
From the approved excerpt of Li et al. (2023), ASME IDETC 2023.
Go deeper · ModelerFitting and scoring a power curve yourself
- M9 fits a Gaussian process to a few records, lets the records choose its settings and adds the maker’s curve as a second source; it also shows a case where that cheap curve misleads.
- M10 scores forecasts on held-out data with MAE, coverage and pinball loss.
- Lesson 5 defines the capacity factor that the toy above averages from the curve, bin by bin.
Check yourself, then try it
Myth or fact? “A power curve fitted to measurements gives the turbine's capacity factor exactly.”
- Myth
- Fact
Answer
Myth. In the toy, 16 records give 31.3% ± 2.8 points (90% band of the expected value, from the fitted curve alone); even 64 records leave ± 0.8.
Myth or fact? “The maker's power curve gives a turbine's real capacity factor.”
- Myth
- Fact
Answer
Myth. In the toy the maker's curve gives 32.4% and the field curve 31.3%: gusts and losses take 1.2 points.
Invented numbers, not the study's: two “90%” bands for one turbine are scored on the same 100 new measurements. Band A is 150 kW wide on average and holds 62 of them; band B is 300 kW wide and holds 89. Which is better?
- A: a narrower band is always better
- B: it holds about what it claims; A's narrowness is false confidence
- Neither: width cannot be compared
- A: it has the lower RMSE
Answer
B. A narrow band helps only if it still holds what it claims; A's “90%” band holds 62%. Width alone cannot decide, and neither can coverage alone: pinball loss weighs both, and which forecast wins can change with the score, as RMSE and pinball loss did in M9.
Try it yourself
Optional, about 30 minutes each; needs Python 3.10 or later (lesson B2).
Try it yourself: the framework fits the three models to an invented turbine type and wind farm in a few seconds. Change the training size and the kernel-density bandwidth, or compare linear and nonlinear fusion on a test function. Its numbers say nothing about any real turbine.
- Run
python examples/sensitivity.py: at 50, 100, 200 and 400 training points, which model has the lowest RMSE, and does the order hold at every size? - Run
python examples/probabilistic.pyand compare the coverage at each nominal level with the level itself.
mfgpr-wind-power-curve: public example repository · MIT licence · synthetic data.
Try it yourself: the framework runs end to end on invented plants in about half a minute; another example compares target choices against a negative control. Its numbers say nothing about any real plant, data product or forecast system.
- Run
python examples/minimal.py, thenpython examples/validation_design.py. A surrogate is useful only if it beats a constant baseline on held-out plants.
wind-uq-surrogate: public example repository · MIT licence · synthetic data.
This work was developed based upon funding from the Alliance for Sustainable Energy, LLC, Managing and Operating Contractor for the National Renewable Energy Laboratory for the U.S. Department of Energy.
Numbers, sources and what’s next
Numbers to remember
| Number | What it means | Source |
|---|---|---|
| nine turbines | In the reported nine-turbine test, nonlinear multi-fidelity regression achieved lower RMSE for most turbines; performance depended on the evaluation metric. | Li et al. (2023), ASME IDETC 2023 · presented August 2023 |
| ± 2.8 → ± 1.5 points | The toy's 90% band on the expected capacity factor, from the fitted curve alone, with 16 records: one source against two. | This case file's toy (illustrative) |
Keep going
Where this came up before
Lesson 5 turned a wind farm's power into a capacity factor; this case asks how sure that power curve is.
Lesson 4 drew a band around a demand forecast; here the band is around a turbine's power curve.
Sources and further reading
- Li et al. (2023). A Multi-Fidelity Gaussian Process Regression Method for Probabilistic Wind Farm Power Curve Estimation. Proceedings of the ASME 2023 IDETC-CIE, Volume 3A: 49th Design Automation Conference, V03AT03A034.
- mfgpr-wind-power-curve on GitHub, version 1.0.1 (30 October 2026).
- wind-uq-surrogate on GitHub, version 1.0.0 (2 November 2026).
- Kennedy, M. C., and O'Hagan, A. (2000). Predicting the output from a complex computer code when fast approximations are available. Biometrika, 87(1), 1–13. The linear (autoregressive) multi-fidelity model.
Spotted an error, or stuck? Write to hlli@ksu.edu. Corrections are made in place and dated here.
Text licensed CC BY 4.0, code MIT: teachers and students may reuse and adapt it, with credit to Honglin Li.