{"id":3520,"date":"2023-08-31T11:12:58","date_gmt":"2023-08-31T11:12:58","guid":{"rendered":"https:\/\/neuraldesigner.com\/learning\/solar-power-generation\/"},"modified":"2026-08-25T14:03:35","modified_gmt":"2026-08-25T12:03:35","slug":"solar-power-generation","status":"publish","type":"learning","link":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/","title":{"rendered":"Predict the generation of a solar plant using machine learning"},"content":{"rendered":"\n<style>\n.ndb{width:100vw;margin-left:calc(50% - 50vw);padding:22px 24px 14px;background:#eee;color:#1b2635;font-family:\"Outfit\",\"Roboto\",Arial,sans-serif}.ndb *{box-sizing:border-box}.ndb-wrap{width:min(100%,1200px);margin:0 auto}.ndb a{text-decoration:none;color:#2d799f;font-weight:600}\n.ndb-executive{margin:0 0 34px;padding:32px;border-radius:20px;background:linear-gradient(135deg,#12354b,#245e80);color:#fff;box-shadow:0 16px 36px rgba(0,18,51,.18)}.ndb-executive h2{margin:0 0 12px;padding:0;border:0;color:#fff;font-size:30px;line-height:1.2}.ndb-executive p{margin:0;color:#eaf5fb;font-size:18px;line-height:1.55}.ndb-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:22px}.ndb-kpi{padding:18px;border:1px solid rgba(255,255,255,.18);border-radius:14px;background:rgba(255,255,255,.1)}.ndb-kpi strong{display:block;color:#fff;font-size:25px;line-height:1.1}.ndb-kpi span{display:block;margin-top:6px;color:#d9edf7;font-size:13px}\n.ndb-actions,.ndb-audience,.ndb-downloads{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin:22px 0}.ndb-actions a,.ndb-downloads a{display:inline-flex;align-items:center;justify-content:center;padding:12px 20px;border-radius:24px;background:#245e80;color:#fff!important;font-weight:700}.ndb-executive .ndb-actions a{background:#fff;color:#12354b!important}.ndb-executive .ndb-actions a:last-child{background:transparent;color:#fff!important;border:1px solid rgba(255,255,255,.55)}\n.ndb-lead{margin:0 0 28px;color:#3a4a5a;font-size:18px;line-height:1.6}.ndb-toc{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:0 0 42px;padding:0;list-style:none}.ndb-toc a,.ndb-audience span{display:block;padding:9px 14px;border-radius:20px;background:#e9f2f8;color:#12354b;font-size:14px;font-weight:600}\n.ndb-card{margin:0 0 54px;scroll-margin-top:90px}.ndb-card h2{position:relative;margin:0 0 20px;padding-bottom:12px;border-bottom:1px solid #dbe5ec;color:#001233;font-size:24px}.ndb-card h2:after{content:\"\";position:absolute;bottom:-1px;left:0;width:62px;height:3px;border-radius:2px;background:#56a1c8}.ndb-card h3{margin:28px 0 12px;color:#12354b;font-size:20px}.ndb-card p{margin:0 0 14px;color:#33424f;font-size:16.5px;line-height:1.62}.ndb-card li{margin:5px 0;color:#33424f;font-size:16px;line-height:1.5}.ndb-card code{padding:2px 5px;border-radius:4px;background:#e8eef2;color:#12354b}\n.ndb-value-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:22px 0}.ndb-value{padding:20px;border:1px solid #dce8ef;border-radius:14px;background:#f8fbfd}.ndb-value strong{display:block;margin-bottom:6px;color:#12354b;font-size:17px}.ndb-value span{color:#4a5d6b;line-height:1.45}\n.ndb-note{margin:20px 0;padding:18px 20px;border-left:4px solid #56a1c8;border-radius:0 12px 12px 0;background:#f6fafc;color:#33424f;line-height:1.55}.ndb-note--warning{border-left-color:#e39b36;background:#fff9ef}\n.ndb-card img{display:block;width:auto;max-width:min(680px,100%);height:auto;margin:24px auto;border-radius:12px;box-shadow:0 12px 28px rgba(0,18,51,.12)}.ndb-card img.ndb-architecture{width:min(820px,100%);max-width:100%}.ndb-figure-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin:24px 0}.ndb-figure-grid figure{margin:0;padding:16px;border:1px solid #dce8ef;border-radius:15px;background:#f8fbfd}.ndb-figure-grid img{width:100%;max-width:100%;margin:0 auto 12px;box-shadow:none}.ndb-figure-grid figcaption{color:#405361;font-size:14px;line-height:1.45}\n.ndb-card table{width:auto;max-width:100%;margin:24px auto;border-collapse:separate;border-spacing:0;overflow:hidden;border-radius:12px;background:#fff;box-shadow:0 10px 24px rgba(0,18,51,.08)}.ndb-card th,.ndb-card td{padding:11px 16px;border-bottom:1px solid #e2e9ee;text-align:left}.ndb-card thead th{background:#12354b!important;color:#fff!important}.ndb-card tbody th{background:#eaf2f6!important;color:#12354b!important;text-align:left}.ndb-card tbody tr:nth-child(even) th{background:#f4f8fa!important}.ndb-card tbody td{color:#33424f!important}.ndb-card td{color:#33424f}.ndb-card tbody tr:last-child td{border-bottom:0}\n.ndb-flow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:24px 0}.ndb-flow div{position:relative;padding:18px 16px;border-radius:13px;background:#12354b;color:#fff;text-align:center;font-weight:600}.ndb-flow div:not(:last-child):after{content:\"\u2192\";position:absolute;right:-17px;top:50%;z-index:2;transform:translateY(-50%);color:#56a1c8;font-size:22px}\n.ndb-calculator{margin:26px 0;padding:26px;border:1px solid #cfe0ea;border-radius:18px;background:#f8fbfd;box-shadow:0 12px 28px rgba(0,18,51,.08)}.ndb-calculator h3{margin-top:0}.ndb-calculator-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.ndb-field label{display:block;margin-bottom:6px;color:#33424f;font-size:13px;font-weight:700}.ndb-field input{width:100%;padding:10px 11px;border:1px solid #bdcfda;border-radius:8px;background:#fff;color:#1b2635;font:inherit}.ndb-field small{display:block;margin-top:4px;color:#71818d;font-size:11px}.ndb-calc-actions{display:flex;justify-content:center;gap:10px;margin:18px 0}.ndb-calc-actions button{padding:11px 18px;border:0;border-radius:22px;background:#245e80;color:#fff;font:inherit;font-weight:700;cursor:pointer}.ndb-calc-actions button[type=button]{background:#e4edf2;color:#12354b}.ndb-output{max-width:360px;margin:0 auto;padding:20px;border:1px solid #d8e4eb;border-radius:12px;background:#fff;text-align:center}.ndb-output span{display:block;color:#5e707d;font-size:13px}.ndb-output strong{display:block;margin-top:5px;color:#12354b;font-size:28px}.ndb-calc-status{text-align:center;color:#60727f!important;font-size:13px!important}\n.ndb-card details{margin:22px 0;padding:16px 18px;border:1px solid #dce8ef;border-radius:12px;background:#f8fbfd}.ndb-card summary{cursor:pointer;color:#12354b;font-weight:700}.ndb-card pre{overflow-x:auto;margin:15px 0 0;padding:18px;border-radius:10px;background:#edf2f5;color:#1b2635;font:12px\/1.5 Consolas,monospace;white-space:pre}\n@media(max-width:900px){.ndb-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.ndb-value-grid{grid-template-columns:1fr}.ndb-flow{grid-template-columns:1fr 1fr}.ndb-flow div:after{display:none}}\n@media(max-width:680px){.ndb{padding:12px 14px}.ndb-executive{padding:24px 20px}.ndb-executive h2{font-size:24px}.ndb-kpis,.ndb-figure-grid,.ndb-calculator-grid,.ndb-flow{grid-template-columns:1fr}.ndb-calculator{padding:20px 16px}.ndb-card table{font-size:13px}.ndb-card th,.ndb-card td{padding:9px 8px}}\n<\/style>\n\n<style>\n.ndb{box-sizing:border-box;overflow-x:hidden}\n.ndb-table-scroll{max-width:100%;overflow-x:auto}\n.ndb-card table.ndb-metrics{font-variant-numeric:tabular-nums}.ndb-card table.ndb-metrics td:not(:first-child){text-align:right}\n.ndb-card .ndb-kpi{border-color:#dce8ef;background:#f8fbfd}.ndb-card .ndb-kpi strong{color:#12354b}.ndb-card .ndb-kpi span{color:#5e707d}\n.ndb-architecture--initial{width:min(820px,100%)!important}.ndb-architecture--final{width:min(900px,100%)!important}\n.ndb-chart--square{width:min(560px,100%)!important}.ndb-chart--wide{width:min(780px,100%)!important}\n.ndb-case{margin:26px 0;padding:24px;border:1px solid #cfe0ea;border-radius:16px;background:#f8fbfd}.ndb-case h3{margin-top:0}.ndb-case-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.ndb-case-grid table{width:100%!important;margin:0 auto!important}\n.ndb-result-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:20px 0}.ndb-result{padding:17px;border:1px solid #d8e4eb;border-radius:12px;background:#fff;text-align:center}.ndb-result span{display:block;color:#5e707d;font-size:13px}.ndb-result strong{display:block;margin-top:5px;color:#12354b;font-size:22px}\n.ndb-note--critical{border-left-color:#c64c4c;background:#fff5f5}\n.ndb-preset-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:10px 0 18px}.ndb-preset-actions button{padding:9px 15px;border:1px solid #bfd2dd;border-radius:20px;background:#fff;color:#12354b;font:inherit;font-weight:700;cursor:pointer}\n.ndb-output-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;max-width:720px;margin:0 auto}.ndb-output-grid .ndb-output{max-width:none;width:100%}\n.ndb-code-sample{max-width:100%;margin:18px 0;padding:18px 20px;overflow-x:auto;border:1px solid #d5e2e9;border-radius:12px;background:#f7fafc;box-shadow:0 8px 20px rgba(0,18,51,.06)}.ndb-code-sample code{display:block;padding:0!important;background:transparent!important;color:#173447!important;font:14px\/1.65 Consolas,\"Courier New\",monospace;white-space:pre-wrap}\n@media(max-width:760px){.ndb-case-grid,.ndb-result-grid,.ndb-output-grid{grid-template-columns:1fr}}\n<\/style>\n\n<div class=\"ndb\"><div class=\"ndb-wrap\">\n<section class=\"ndb-executive\"><h2>Forecast three-hour solar generation from weather and solar position<\/h2>\n<p>This example builds a compact nonlinear surrogate for a Berkeley solar installation. Nine routinely available weather and timing variables are converted into an estimate of the energy generated during each three-hour period.<\/p>\n<div class=\"ndb-kpis\"><div class=\"ndb-kpi\"><strong>2,920<\/strong><span>three-hour records<\/span><\/div><div class=\"ndb-kpi\"><strong>9<\/strong><span>operational inputs<\/span><\/div><div class=\"ndb-kpi\"><strong>0.895<\/strong><span>testing R\u00b2<\/span><\/div><div class=\"ndb-kpi\"><strong>2,019<\/strong><span>testing MAE<\/span><\/div><\/div>\n<div class=\"ndb-actions\"><a href=\"#7-model-deployment\">Try an operating scenario<\/a><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar_power_generation.csv\">Download the dataset<\/a><\/div><\/section>\n<div class=\"ndb-lead\"><p>Short-horizon generation estimates can support production planning, deviation analysis and expected-versus-actual monitoring. The model is deliberately lightweight, but professional use still requires timestamped forecasting, plant availability signals, unit calibration and validation on future operating periods.<\/p><\/div>\n<ul class=\"ndb-toc\"><li><a href=\"#1-industrial-challenge\">Industrial challenge<\/a><\/li><li><a href=\"#2-data-set\">Data set<\/a><\/li><li><a href=\"#3-model\">Neural network<\/a><\/li><li><a href=\"#4-training\">Training<\/a><\/li><li><a href=\"#5-selection\">Model selection<\/a><\/li><li><a href=\"#6-testing\">Testing<\/a><\/li><li><a href=\"#7-model-deployment\">Deployment<\/a><\/li><li><a href=\"#8-limitations\">Limitations<\/a><\/li><li><a href=\"#references\">References<\/a><\/li><\/ul>\n\n<section id=\"1-industrial-challenge\" class=\"ndb-card\"><h2>1. Industrial challenge<\/h2>\n<p>This is an <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-networks-applications\/#Approximation\">approximation<\/a> problem: the network maps a three-hour operating context to the generation reported by the data source.<\/p>\n<div class=\"ndb-value-grid\"><div class=\"ndb-value\"><strong>Plan expected production<\/strong><span>Turn weather forecasts into a short-horizon generation estimate for plant and portfolio planning.<\/span><\/div><div class=\"ndb-value\"><strong>Detect underperformance<\/strong><span>Compare measured production with a weather-adjusted expectation to prioritize inspection and cleaning work.<\/span><\/div><div class=\"ndb-value\"><strong>Evaluate scenarios<\/strong><span>Quantify how changing cloud cover, humidity or distance from solar noon affects the predicted operating point.<\/span><\/div><\/div>\n<p>Potential users include solar plant managers, operations and maintenance teams, performance engineers, energy forecasters, portfolio operators and industrial analytics teams.<\/p>\n<div class=\"ndb-audience\"><span>Plant operations<\/span><span>O&amp;M<\/span><span>Performance engineering<\/span><span>Energy forecasting<\/span><span>Portfolio operations<\/span><\/div>\n<div class=\"ndb-note\"><strong>Scope of this example.<\/strong> This is a data-driven surrogate for one historical installation. It estimates the dataset target; it is not a physical photovoltaic model, certified meter, dispatch instruction or revenue-settlement calculation.<\/div><\/section>\n\n<section id=\"2-data-set\" class=\"ndb-card\"><h2>2. Data set<\/h2>\n<p>The updated <a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar_power_generation.csv\"><code>solar_power_generation.csv<\/code><\/a> contains <strong>2,920 records<\/strong>, nine inputs and one target. Each row represents a three-hour period. All input combinations are unique; one <code>average_wind_speed<\/code> value is missing and is imputed with the training statistic configured in the Neural Designer project.<\/p>\n<div class=\"ndb-downloads\"><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar_power_generation.csv\">Download solar_power_generation.csv<\/a><\/div>\n<div class=\"ndb-table-scroll\"><table><thead><tr><th>Variable<\/th><th>Operational meaning<\/th><th>Source scale \/ range<\/th><\/tr><\/thead><tbody>\n<tr><td><code>distance_to_solar_noon<\/code><\/td><td>Absolute angular distance from solar noon<\/td><td>0.0504 to 1.1414 rad<\/td><\/tr>\n<tr><td><code>temperature<\/code><\/td><td>Ambient temperature<\/td><td>42 to 78 \u00b0F<\/td><\/tr>\n<tr><td><code>wind_direction<\/code><\/td><td>Coded wind-direction sector<\/td><td>1 to 36; approximately ten-degree sectors<\/td><\/tr>\n<tr><td><code>wind_speed<\/code><\/td><td>Observed wind speed<\/td><td>1.1 to 26.6 mph<\/td><\/tr>\n<tr><td><code>sky_cover<\/code><\/td><td>Cloud-cover category<\/td><td>0 clear to 4 overcast<\/td><\/tr>\n<tr><td><code>visibility<\/code><\/td><td>Reported visibility<\/td><td>0 to 10 mi<\/td><\/tr>\n<tr><td><code>humidity<\/code><\/td><td>Relative humidity<\/td><td>14% to 100%<\/td><\/tr>\n<tr><td><code>average_wind_speed<\/code><\/td><td>Average wind speed over the period<\/td><td>0 to 40 mph<\/td><\/tr>\n<tr><td><code>average_pressure<\/code><\/td><td>Average atmospheric pressure over the period<\/td><td>29.48 to 30.53 inHg<\/td><\/tr>\n<tr><td><code>power_generated<\/code><\/td><td>Generation reported for the three-hour period<\/td><td>Target; 0 to 36,580 dataset units<\/td><\/tr>\n<\/tbody><\/table><\/div>\n<div class=\"ndb-note\"><strong>Unit discipline.<\/strong> The weather fields retain the source data scale. Before integrating a live data feed, document every physical unit and conversion explicitly. The target is presented as dataset generation units because the public source does not provide enough plant-meter metadata for a defensible engineering conversion.<\/div>\n<div class=\"ndb-figure-grid\"><figure><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-output-distribution-2026.png\" alt=\"Distribution of three-hour solar generation values\"><figcaption><strong>Zero-heavy target.<\/strong> About 45.2% of records report zero generation, and 62.7% fall in the first histogram interval.<\/figcaption><\/figure><figure><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-correlations-2026.png\" alt=\"Pearson correlations between solar generation and the nine inputs\"><figcaption><strong>Timing dominates.<\/strong> Distance from solar noon has the strongest inverse association in the regenerated Neural Designer report; humidity is also negatively associated with generation.<\/figcaption><\/figure><\/div>\n<img decoding=\"async\" class=\"ndb-chart--wide\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-distance-scatter-2026.png\" alt=\"Solar generation against distance from solar noon with the fitted directional relationship\">\n<p>The scatter plot captures the expected decline away from solar noon, but also exposes a deployment issue: the unconstrained neural response can become negative and non-monotonic at the edge of the represented range. This is addressed explicitly in the deployment controls below.<\/p>\n<p>The configured random split contains <strong>1,752 training<\/strong>, <strong>584 selection<\/strong> and <strong>584 testing<\/strong> records.<\/p><\/section>\n\n<section id=\"3-model\" class=\"ndb-card\"><h2>3. Neural network<\/h2>\n<p>The baseline model standardizes the nine inputs, uses three tanh neurons in one hidden layer, and returns one continuous output through an identity activation and output unscaling.<\/p>\n<img decoding=\"async\" class=\"ndb-architecture ndb-architecture--initial\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-network-initial-2026.png\" alt=\"Initial 9-3-1 solar generation neural network\">\n<p>This compact 9\u20133\u20131 architecture provides the starting point for training before the hidden-layer width is selected from held-out data.<\/p><\/section>\n\n<section id=\"4-training\" class=\"ndb-card\"><h2>4. Training strategy<\/h2>\n<p>The network minimizes normalized squared error with the quasi-Newton method. Over 104 epochs, the training error falls from 1.0056 to 0.1477 and the selection error from 0.3451 to 0.0381.<\/p>\n<img decoding=\"async\" class=\"ndb-chart--wide\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-training-history-2026.png\" alt=\"Quasi-Newton training and selection error history for solar generation\">\n<p>The declining curves show stable convergence for the configured random split. They do not, by themselves, demonstrate performance on a future season or a different photovoltaic installation.<\/p><\/section>\n\n<section id=\"5-selection\" class=\"ndb-card\"><h2>5. Model selection<\/h2>\n<p>The growing-neurons task evaluates hidden layers from one to ten neurons. The minimum selection error occurs with <strong>nine hidden neurons<\/strong>, reducing the selected training and selection errors to 0.1269 and 0.0323.<\/p>\n<div class=\"ndb-figure-grid\"><figure><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-neuron-selection-2026.png\" alt=\"Training and selection errors for one to ten hidden neurons\"><figcaption>The selection error reaches its minimum at nine neurons.<\/figcaption><\/figure><figure><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-network-final-2026.png\" alt=\"Final 9-9-1 solar generation neural network\"><figcaption>The final 9\u20139\u20131 architecture matches the exported Python model used below.<\/figcaption><\/figure><\/div><\/section>\n\n<section id=\"6-testing\" class=\"ndb-card\"><h2>6. Testing analysis<\/h2>\n<p>The final exported network is evaluated on the 584 testing records that were not used to fit its parameters or choose the hidden-layer size.<\/p>\n<div class=\"ndb-kpis\"><div class=\"ndb-kpi\"><strong>0.895<\/strong><span>coefficient of determination<\/span><\/div><div class=\"ndb-kpi\"><strong>2,019<\/strong><span>mean absolute error<\/span><\/div><div class=\"ndb-kpi\"><strong>3,225<\/strong><span>root mean squared error<\/span><\/div><div class=\"ndb-kpi\"><strong>-38.9<\/strong><span>mean prediction bias<\/span><\/div><\/div>\n<img decoding=\"async\" class=\"ndb-chart--square\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-gof-2026.png\" alt=\"Goodness-of-fit chart for observed and predicted three-hour solar generation\">\n<p>The model explains approximately 89.5% of testing variance, but the chart shows compression at high generation: the network tends to underpredict some of the strongest production periods. The 95th percentile absolute error is about 7,042 dataset units, which is operationally more informative than R\u00b2 alone when defining alert thresholds.<\/p>\n<div class=\"ndb-note ndb-note--critical\"><strong>Physical output check.<\/strong> Raw testing predictions range from approximately -5,216 to 31,498 while generation cannot be negative. A production implementation should use a non-negative model\/bounding layer or documented post-processing and should monitor how often that safeguard activates.<\/div><\/section>\n\n<section id=\"7-model-deployment\" class=\"ndb-card\"><h2>7. Model deployment<\/h2>\n<p>A professional workflow combines forecast or SCADA inputs with schema, unit and range checks; applies the trained surrogate; enforces physical operating rules; and records the forecast, model version and later measured production for monitoring.<\/p>\n<div class=\"ndb-flow\"><div>Weather forecast and plant context<\/div><div>Schema, unit and range validation<\/div><div>Solar-generation surrogate<\/div><div>Physical bounds and operating decision<\/div><\/div>\n<div class=\"ndb-case\"><h3>Representative near-noon operating case<\/h3>\n<p>This observed row from the dataset matches the reference point used in the regenerated directional-output analysis. It provides reproducible values for testing the downloaded Python model or the browser calculator.<\/p>\n<div class=\"ndb-case-grid\"><table><thead><tr><th>Input<\/th><th>Value<\/th><\/tr><\/thead><tbody>\n<tr><td>Distance to solar noon<\/td><td>0.16623 rad<\/td><\/tr><tr><td>Temperature<\/td><td>62 \u00b0F<\/td><\/tr><tr><td>Wind direction code<\/td><td>29<\/td><\/tr><tr><td>Wind speed<\/td><td>14.9 mph<\/td><\/tr><tr><td>Sky cover<\/td><td>1 \u2014 low cloud<\/td><\/tr><tr><td>Visibility<\/td><td>10 mi<\/td><\/tr><tr><td>Relative humidity<\/td><td>68%<\/td><\/tr><tr><td>Average wind speed<\/td><td>14 mph<\/td><\/tr><tr><td>Average pressure<\/td><td>29.77 inHg<\/td><\/tr>\n<\/tbody><\/table><table><thead><tr><th>Result<\/th><th>Dataset units \/ 3 h<\/th><\/tr><\/thead><tbody><tr><td>Observed generation<\/td><td>24,553<\/td><\/tr><tr><td>Model prediction<\/td><td>22,254.3<\/td><\/tr><tr><td>Prediction error<\/td><td>-2,298.7 (-9.4%)<\/td><\/tr><\/tbody><\/table><\/div>\n<p><strong>Interpretation:<\/strong> the model estimates 22,254.3 units, around 9.4% below the observed value. For a plant manager, this single estimate is not an alarm threshold; it is a reproducible baseline that can be combined with an error band and later compared with the meter reading to identify sustained underperformance.<\/p><\/div>\n<h3>Distance-to-solar-noon scenario analysis<\/h3>\n<p>Holding the remaining reference inputs fixed, the directional-output task shows the estimated production profile as the operating period moves away from solar noon.<\/p>\n<img decoding=\"async\" class=\"ndb-chart--wide\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-distance-directional-2026.png\" alt=\"Directional output of solar generation across distance from solar noon\">\n<p>The central decline is operationally intuitive; the negative and upward-turning tail is not. Treat it as evidence that the unconstrained surrogate should not be extrapolated into a physical production curve without daylight logic, non-negative bounds and validation against timestamped plant data.<\/p>\n\n<div class=\"ndb-calculator\" id=\"solar-calculator\">\n<h3>Try the three-hour generation model<\/h3>\n<p>Use one of the representative operating points or enter values inside the ranges represented by the data. The calculation runs locally in the browser with the same weights and scaling as the exported Python model. Inputs outside the training range trigger a warning; this is not a certified forecasting, dispatch or settlement tool.<\/p>\n<div class=\"ndb-preset-actions\"><button type=\"button\" id=\"sp-near-noon\">Near-noon, low cloud<\/button><button type=\"button\" id=\"sp-cloudy\">Cloudier period<\/button><\/div>\n<form id=\"solar-calculator-form\"><div class=\"ndb-calculator-grid\">\n<div class=\"ndb-field\"><label for=\"sp-distance\">Distance to solar noon (rad)<\/label><input id=\"sp-distance\" type=\"number\" min=\"0.050400916\" max=\"1.141361257\" step=\"any\" value=\"0.166230366\"><small>0.0504 to 1.1414<\/small><\/div>\n<div class=\"ndb-field\"><label for=\"sp-temperature\">Temperature (\u00b0F)<\/label><input id=\"sp-temperature\" type=\"number\" min=\"42\" max=\"78\" step=\"any\" value=\"62\"><small>42 to 78<\/small><\/div>\n<div class=\"ndb-field\"><label for=\"sp-direction\">Wind direction code<\/label><input id=\"sp-direction\" type=\"number\" min=\"1\" max=\"36\" step=\"any\" value=\"29\"><small>1 to 36; ten-degree sectors<\/small><\/div>\n<div class=\"ndb-field\"><label for=\"sp-wind\">Wind speed (mph)<\/label><input id=\"sp-wind\" type=\"number\" min=\"1.1\" max=\"26.6\" step=\"any\" value=\"14.9\"><small>1.1 to 26.6<\/small><\/div>\n<div class=\"ndb-field\"><label for=\"sp-sky\">Sky cover code<\/label><input id=\"sp-sky\" type=\"number\" min=\"0\" max=\"4\" step=\"1\" value=\"1\"><small>0 clear to 4 overcast<\/small><\/div>\n<div class=\"ndb-field\"><label for=\"sp-visibility\">Visibility (mi)<\/label><input id=\"sp-visibility\" type=\"number\" min=\"0\" max=\"10\" step=\"any\" value=\"10\"><small>0 to 10<\/small><\/div>\n<div class=\"ndb-field\"><label for=\"sp-humidity\">Relative humidity (%)<\/label><input id=\"sp-humidity\" type=\"number\" min=\"14\" max=\"100\" step=\"any\" value=\"68\"><small>14 to 100<\/small><\/div>\n<div class=\"ndb-field\"><label for=\"sp-average-wind\">Three-hour average wind (mph)<\/label><input id=\"sp-average-wind\" type=\"number\" min=\"0\" max=\"40\" step=\"any\" value=\"14\"><small>0 to 40<\/small><\/div>\n<div class=\"ndb-field\"><label for=\"sp-pressure\">Three-hour average pressure (inHg)<\/label><input id=\"sp-pressure\" type=\"number\" min=\"29.48\" max=\"30.53\" step=\"any\" value=\"29.77\"><small>29.48 to 30.53<\/small><\/div>\n<\/div><div class=\"ndb-calc-actions\"><button type=\"submit\">Calculate generation<\/button><button type=\"button\" id=\"sp-reset\">Reset example<\/button><\/div><\/form>\n<div class=\"ndb-output-grid\" aria-live=\"polite\"><div class=\"ndb-output\"><span>Raw neural-network output<\/span><strong id=\"sp-raw-output\">\u2014<\/strong><\/div><div class=\"ndb-output\"><span>Operational non-negative output<\/span><strong id=\"sp-operational-output\">\u2014<\/strong><\/div><\/div>\n<p class=\"ndb-calc-status\" id=\"sp-status\">Dataset generation units per three-hour period. Demonstration model, not a dispatch or revenue-settlement system.<\/p>\n<\/div>\n<script>\n(function(){\nconst ids=[\"sp-distance\",\"sp-temperature\",\"sp-direction\",\"sp-wind\",\"sp-sky\",\"sp-visibility\",\"sp-humidity\",\"sp-average-wind\",\"sp-pressure\"];\nconst mins=[0.050400916,42,1,1.1,0,0,14,0,29.48];\nconst maxs=[1.141361257,78,36,26.6,4,10,100,40,30.53];\nconst defaults=[0.166230366,62,29,14.9,1,10,68,14,29.77];\nconst presets={\nnear:[0.050574713,60,30,13,1,10,59,16,30.03],\ncloudy:[0.30876217,59,20,8.6,3,10,70,16,30.25]\n};\nfunction setValues(values){ids.forEach(function(id,i){document.getElementById(id).value=values[i];});calculate();}\nfunction calculate(){\nconst values=ids.map(function(id){return Number(document.getElementById(id).value);});\nif(values.some(function(value){return !Number.isFinite(value);})){document.getElementById(\"sp-status\").textContent=\"Complete all nine inputs with valid numbers.\";return;}\nconst distance_to_solar_noon=values[0],temperature=values[1],wind_direction=values[2],wind_speed=values[3],sky_cover=values[4],visibility=values[5],humidity=values[6],average_wind_speed=values[7],average_pressure=values[8];\nconst scaled_distance_to_solar_noon = (distance_to_solar_noon-0.5032939911)\/0.297973007;\nconst scaled_temperature = (temperature-58.46849823)\/6.84002018;\nconst scaled_wind_direction = (wind_direction-24.95339966)\/6.913990021;\nconst scaled_wind_speed = (wind_speed-10.09700012)\/4.837349892;\nconst scaled_sky_cover = (sky_cover-1.987669945)\/1.411739945;\nconst scaled_visibility = (visibility-9.557709694)\/1.383679986;\nconst scaled_humidity = (humidity-73.51370239)\/15.07460022;\nconst scaled_average_wind_speed = (average_wind_speed-10.12919998)\/7.259059906;\nconst scaled_average_pressure = (average_pressure-30.0177002)\/0.1419810057;\nconst dense_layer_1_output_0 = Math.tanh( -0.9979891777 + (-1.116855621*scaled_distance_to_solar_noon) + (0.007241421379*scaled_temperature) + (0.051038187*scaled_wind_direction) + (0.02050408721*scaled_wind_speed) + (-0.1489195079*scaled_sky_cover) + (0.01876241155*scaled_visibility) + (-0.1792054772*scaled_humidity) + (0.02473625354*scaled_average_wind_speed) + (0.06283085048*scaled_average_pressure) );\nconst dense_layer_1_output_1 = Math.tanh( -0.3377572596 + (-0.1726522893*scaled_distance_to_solar_noon) + (-0.1457702816*scaled_temperature) + (-0.0354174003*scaled_wind_direction) + (0.04484851286*scaled_wind_speed) + (0.3053798974*scaled_sky_cover) + (-0.01307993196*scaled_visibility) + (0.4059507251*scaled_humidity) + (-0.1367792189*scaled_average_wind_speed) + (-0.2307303995*scaled_average_pressure) );\nconst dense_layer_1_output_2 = Math.tanh( 0.4059394896 + (-0.6780515909*scaled_distance_to_solar_noon) + (0.02897746116*scaled_temperature) + (0.1980074942*scaled_wind_direction) + (0.1526566297*scaled_wind_speed) + (-0.1031713113*scaled_sky_cover) + (0.1057145968*scaled_visibility) + (-0.09183643013*scaled_humidity) + (0.1920555085*scaled_average_wind_speed) + (0.02102574334*scaled_average_pressure) );\nconst dense_layer_1_output_3 = Math.tanh( 0.4260548949 + (-0.5511541367*scaled_distance_to_solar_noon) + (-0.00484635029*scaled_temperature) + (-0.4786038399*scaled_wind_direction) + (-0.1138649061*scaled_wind_speed) + (0.1143584922*scaled_sky_cover) + (-0.005332665984*scaled_visibility) + (0.2761901915*scaled_humidity) + (0.02616640925*scaled_average_wind_speed) + (0.1280216873*scaled_average_pressure) );\nconst dense_layer_1_output_4 = Math.tanh( -0.09355551004 + (-0.01555912383*scaled_distance_to_solar_noon) + (0.02307794429*scaled_temperature) + (-0.06876526773*scaled_wind_direction) + (-0.1154047996*scaled_wind_speed) + (0.1050279438*scaled_sky_cover) + (-0.1096705645*scaled_visibility) + (-0.0939231962*scaled_humidity) + (-0.005770660006*scaled_average_wind_speed) + (0.1259226054*scaled_average_pressure) );\nconst dense_layer_1_output_5 = Math.tanh( 0.1867224425 + (-0.5665379167*scaled_distance_to_solar_noon) + (-0.2030738443*scaled_temperature) + (0.007991081104*scaled_wind_direction) + (-0.03937254474*scaled_wind_speed) + (0.3611990213*scaled_sky_cover) + (-0.01630988531*scaled_visibility) + (0.1907176673*scaled_humidity) + (-0.07285736501*scaled_average_wind_speed) + (-0.2801794708*scaled_average_pressure) );\nconst dense_layer_1_output_6 = Math.tanh( 0.01830519177 + (0.1751922816*scaled_distance_to_solar_noon) + (0.07141482085*scaled_temperature) + (0.5392584801*scaled_wind_direction) + (0.2587042451*scaled_wind_speed) + (-0.1600910723*scaled_sky_cover) + (-0.02765147574*scaled_visibility) + (-0.3585402966*scaled_humidity) + (0.1451424956*scaled_average_wind_speed) + (0.02592223138*scaled_average_pressure) );\nconst dense_layer_1_output_7 = Math.tanh( 0.03939838335 + (0.04387766495*scaled_distance_to_solar_noon) + (0.004133407027*scaled_temperature) + (0.09600681812*scaled_wind_direction) + (0.1053407267*scaled_wind_speed) + (-0.06325639784*scaled_sky_cover) + (0.08767393231*scaled_visibility) + (0.07416261733*scaled_humidity) + (0.03538022563*scaled_average_wind_speed) + (-0.09310099483*scaled_average_pressure) );\nconst dense_layer_1_output_8 = Math.tanh( 0.001920389361 + (-0.08598747849*scaled_distance_to_solar_noon) + (0.069751136*scaled_temperature) + (0.0396627672*scaled_wind_direction) + (0.02761960775*scaled_wind_speed) + (0.07091332227*scaled_sky_cover) + (-0.09017696977*scaled_visibility) + (0.08551346511*scaled_humidity) + (-0.05083359033*scaled_average_wind_speed) + (4.278711276e-05*scaled_average_pressure) );\nconst approximation_layer_output_0 = ( 0.3438040912 + (1.38315618*dense_layer_1_output_0) + (-0.6406145096*dense_layer_1_output_1) + (-0.7897666693*dense_layer_1_output_2) + (0.6203062534*dense_layer_1_output_3) + (-0.3179332018*dense_layer_1_output_4) + (0.6197627187*dense_layer_1_output_5) + (0.6636582613*dense_layer_1_output_6) + (0.2065880448*dense_layer_1_output_7) + (0.0878161788*dense_layer_1_output_8) );\nconst unscaling_layer_output_0=approximation_layer_output_0*10310.59961+6979.850098;\nconst power_generated = unscaling_layer_output_0;\nconst raw=power_generated;\nconst operational=Math.max(0,raw);\nconst outside=values.reduce(function(found,value,index){if(value<mins[index]||value>maxs[index])found.push(index+1);return found;},[]);\ndocument.getElementById(\"sp-raw-output\").textContent=raw.toLocaleString(undefined,{maximumFractionDigits:1});\ndocument.getElementById(\"sp-operational-output\").textContent=operational.toLocaleString(undefined,{maximumFractionDigits:1});\ndocument.getElementById(\"sp-status\").textContent=outside.length?\"Warning: input fields \"+outside.join(\", \")+\" are outside the training range; do not use this extrapolated result.\":raw<0?\"The raw model is negative. A physical production pipeline should apply a daylight\/availability rule and a non-negative bound.\":\"All individual inputs are inside the displayed ranges; joint-combination and asset-status checks are still required.\";\n}\ndocument.getElementById(\"solar-calculator-form\").addEventListener(\"submit\",function(event){event.preventDefault();calculate();});\ndocument.getElementById(\"sp-reset\").addEventListener(\"click\",function(){setValues(defaults);});\ndocument.getElementById(\"sp-near-noon\").addEventListener(\"click\",function(){setValues(presets.near);});\ndocument.getElementById(\"sp-cloudy\").addEventListener(\"click\",function(){setValues(presets.cloudy);});\ncalculate();\n})();\n<\/script>\n<h3>Integrate the exported model<\/h3>\n<p>The deployment package contains the exact Neural Designer Python export and a README with the input order, example call and production safeguards.<\/p>\n<div class=\"ndb-code-sample\"><code>from model import NeuralNetwork<br><br>model = NeuralNetwork()<br>generation = model.calculate_outputs(<br>    [0.166230366, 62, 29, 14.9, 1, 10, 68, 14, 29.77]<br>)[0]<\/code><\/div>\n<div class=\"ndb-downloads\"><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar-power-generation-python-model-2026.zip\">Download Python model (ZIP)<\/a><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/solar_power_generation.csv\">Download dataset (CSV)<\/a><\/div>\n<div class=\"ndb-note ndb-note--warning\"><strong>Deployment boundary.<\/strong> Add timestamp and timezone handling, unit\/schema validation, daylight and plant-availability gates, a non-negative output rule, prediction intervals, drift monitoring and measured-versus-expected backtesting. Do not use this demonstration as a dispatch, market-bid or settlement model.<\/div><\/section>\n\n<section id=\"8-limitations\" class=\"ndb-card\"><h2>8. Scope and limitations<\/h2><ul>\n<li>The data represents one Berkeley solar installation and does not establish transfer to another technology, orientation, capacity, soiling regime or climate.<\/li>\n<li>The random 60\/20\/20 row split can mix neighbouring periods across subsets. Operational validation should reserve later dates and complete seasons to test genuine forecasting performance.<\/li>\n<li>About 45.2% of target values are zero. A two-stage daylight\/availability classifier followed by a positive-generation regressor may model this structure more naturally.<\/li>\n<li>Direct irradiance, module temperature, installed capacity, inverter status, curtailment, outages, cleaning and shading are absent; these can explain production changes that weather proxies cannot.<\/li>\n<li>The public data does not document sufficient meter calibration and plant metadata to convert the target into a defensible engineering energy unit.<\/li>\n<li>The current network can return negative values and compresses the highest outputs. Physical bounds and stronger high-generation validation are required.<\/li>\n<li>Forecasting use must evaluate forecast weather rather than observed weather and compare against simple persistence and clear-sky baselines.<\/li>\n<li>Maintenance alerts should require sustained, statistically significant measured-versus-expected deviations, not a single model residual.<\/li>\n<\/ul><\/section>\n\n<section id=\"references\" class=\"ndb-card\"><h2>References<\/h2><ul><li>BigML. <a href=\"https:\/\/blog.bigml.com\/2015\/06\/05\/predicting-solar-power-energy-generation\/\" target=\"_blank\" rel=\"noopener\">Predicting solar power energy generation<\/a>: origin and context of the Berkeley installation data.<\/li><li><a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/testing-analysis\/\">Neural Designer testing analysis<\/a>: goodness-of-fit and error interpretation.<\/li><li><a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment\/\">Neural Designer model deployment<\/a>: output calculation and Python export.<\/li><\/ul><\/section>\n<\/div><\/div>","protected":false},"author":13,"featured_media":1506,"template":"","categories":[29],"tags":[44],"class_list":["post-3520","learning","type-learning","status-publish","has-post-thumbnail","hentry","category-examples","tag-energy"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Predict the generation of a solar plant using machine learning<\/title>\n<meta name=\"description\" content=\"Build a machine learning model to predict power generation in a solar plant based on environmental conditions.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Predict Power Generation\" \/>\n<meta property=\"og:description\" content=\"In this example, we predict the power generated by a solar plant based on various environmental conditions using machine learning.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/\" \/>\n<meta property=\"og:site_name\" content=\"Neural Designer\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-25T12:03:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Predict Power Generation\" \/>\n<meta name=\"twitter:description\" content=\"In this example, we predict the power generated by a solar plant based on various environmental conditions using machine learning.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp\" \/>\n<meta name=\"twitter:site\" content=\"@NeuralDesigner\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/\",\"name\":\"Predict the generation of a solar plant using machine learning\",\"isPartOf\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp\",\"datePublished\":\"2023-08-31T11:12:58+00:00\",\"dateModified\":\"2026-08-25T12:03:35+00:00\",\"description\":\"Build a machine learning model to predict power generation in a solar plant based on environmental conditions.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#primaryimage\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp\",\"width\":1200,\"height\":628,\"caption\":\"Solar power\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.neuraldesigner.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Learning\",\"item\":\"https:\/\/www.neuraldesigner.com\/learning\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Predict the generation of a solar plant using machine learning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"name\":\"Neural Designer\",\"description\":\"Explainable AI Platform\",\"publisher\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.neuraldesigner.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\",\"name\":\"Neural Designer\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"width\":1024,\"height\":223,\"caption\":\"Neural Designer\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NeuralDesigner\",\"https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Predict the generation of a solar plant using machine learning","description":"Build a machine learning model to predict power generation in a solar plant based on environmental conditions.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/","og_locale":"en_US","og_type":"article","og_title":"Predict Power Generation","og_description":"In this example, we predict the power generated by a solar plant based on various environmental conditions using machine learning.","og_url":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/","og_site_name":"Neural Designer","article_modified_time":"2026-08-25T12:03:35+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_title":"Predict Power Generation","twitter_description":"In this example, we predict the power generated by a solar plant based on various environmental conditions using machine learning.","twitter_image":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp","twitter_site":"@NeuralDesigner","twitter_misc":{"Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/","url":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/","name":"Predict the generation of a solar plant using machine learning","isPartOf":{"@id":"https:\/\/www.neuraldesigner.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#primaryimage"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp","datePublished":"2023-08-31T11:12:58+00:00","dateModified":"2026-08-25T12:03:35+00:00","description":"Build a machine learning model to predict power generation in a solar plant based on environmental conditions.","breadcrumb":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#primaryimage","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/solar-power.webp","width":1200,"height":628,"caption":"Solar power"},{"@type":"BreadcrumbList","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/solar-power-generation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.neuraldesigner.com\/"},{"@type":"ListItem","position":2,"name":"Learning","item":"https:\/\/www.neuraldesigner.com\/learning\/"},{"@type":"ListItem","position":3,"name":"Predict the generation of a solar plant using machine learning"}]},{"@type":"WebSite","@id":"https:\/\/www.neuraldesigner.com\/#website","url":"https:\/\/www.neuraldesigner.com\/","name":"Neural Designer","description":"Explainable AI Platform","publisher":{"@id":"https:\/\/www.neuraldesigner.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.neuraldesigner.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.neuraldesigner.com\/#organization","name":"Neural Designer","url":"https:\/\/www.neuraldesigner.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","width":1024,"height":223,"caption":"Neural Designer"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NeuralDesigner","https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning"}],"about":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/types\/learning"}],"author":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/users\/13"}],"version-history":[{"count":8,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3520\/revisions"}],"predecessor-version":[{"id":23685,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3520\/revisions\/23685"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media\/1506"}],"wp:attachment":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media?parent=3520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/categories?post=3520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/tags?post=3520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}