<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.4 20241031//EN" "JATS-journalpublishing1-4.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article" dtd-version="1.4" xml:lang="en">
  <front>
    <journal-meta>
      <journal-id journal-id-type="publisher-id">jcc</journal-id>
      <journal-title-group>
        <journal-title>Journal of Computer and Communications</journal-title>
      </journal-title-group>
      <issn pub-type="epub">2327-5227</issn>
      <issn pub-type="ppub">2327-5219</issn>
      <publisher>
        <publisher-name>Scientific Research Publishing</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.4236/jcc.2026.1411003</article-id>
      <article-id pub-id-type="publisher-id">jcc-155135</article-id>
      <article-categories>
        <subj-group>
          <subject>Article</subject>
        </subj-group>
        <subj-group>
          <subject>Computer Science</subject>
          <subject>Communications</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Performance Study of the RNN-LSTM-XGBoost Algorithm for Photovoltaic Power Forecasting</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <name name-style="western">
            <surname>Yang</surname>
            <given-names>Zhengyu</given-names>
          </name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
      </contrib-group>
      <aff id="aff1"><label>1</label> College of Energy and Power Engineering, Lanzhou University of Technology, Lanzhou, China </aff>
      <author-notes>
        <fn fn-type="conflict" id="fn-conflict">
          <p>The author declares no conflicts of interest regarding the publication of this paper.</p>
        </fn>
      </author-notes>
      <pub-date pub-type="epub">
        <day>04</day>
        <month>11</month>
        <year>2026</year>
      </pub-date>
      <pub-date pub-type="collection">
        <month>11</month>
        <year>2026</year>
      </pub-date>
      <volume>14</volume>
      <issue>11</issue>
      <fpage>54</fpage>
      <lpage>71</lpage>
      <history>
        <date date-type="received">
          <day>09</day>
          <month>10</month>
          <year>2026</year>
        </date>
        <date date-type="accepted">
          <day>03</day>
          <month>11</month>
          <year>2026</year>
        </date>
        <date date-type="published">
          <day>06</day>
          <month>11</month>
          <year>2026</year>
        </date>
      </history>
      <permissions>
        <copyright-statement>© 2026 by the authors and Scientific Research Publishing Inc.</copyright-statement>
        <copyright-year>2026</copyright-year>
        <license license-type="open-access">
          <license-p> This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license ( <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link> ). </license-p>
        </license>
      </permissions>
      <self-uri content-type="doi" xlink:href="https://doi.org/10.4236/jcc.2026.1411003">https://doi.org/10.4236/jcc.2026.1411003</self-uri>
      <abstract>
        <p>Among the forces now driving the expansion of world electricity supply, solar photovoltaic (PV) generation occupies a leading position. Figures assembled by the UK energy think tank Ember for its Global Electricity Review 2026 indicate that worldwide solar output amounted to 2778 TWh during 2025, some 30% above the level of the preceding year and equivalent to about 8.8% of all electricity produced globally. Since PV output is closely tied to weather conditions and consequently varies a great deal, the continued growth of installed capacity makes the accuracy of power forecasting, and its adaptability to different forecast horizons, increasingly important. Against this background, the present study examines how the RNN-LSTM-XGBoost hybrid model behaves in practice at several forecasting horizons. The algorithmic principle of the model is discussed first, experiments on measured PV data follow, and the forecasts obtained are then set against the measured values at a number of time horizons, so that the forecasting capability of the model can be judged comprehensively and the manner in which its accuracy changes with the forecast horizon can be examined.</p>
      </abstract>
      <kwd-group kwd-group-type="author-generated" xml:lang="en">
        <kwd>Photovoltaic Power Generation</kwd>
        <kwd>Power Forecasting</kwd>
        <kwd>LSTM</kwd>
        <kwd>RNN-LSTM</kwd>
        <kwd>XGBoost</kwd>
        <kwd>Performance Testing</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec1">
      <title>1. Introduction</title>
      <p>Profound changes are under way in the way energy is produced and consumed worldwide, and PV power generation, being one of the pillars of clean energy, has expanded its installed base continuously. In its Renewables 2024 report the International Energy Agency (IEA) anticipates that renewable sources will satisfy close to one half of world electricity demand by 2030 [<xref ref-type="bibr" rid="B1">1</xref>]; PV generation is expected to be a leading player in that development [<xref ref-type="bibr" rid="B2">2</xref>]-[<xref ref-type="bibr" rid="B4">4</xref>]. The power delivered by a PV plant is nevertheless governed by a range of meteorological variables solar irradiance, air temperature, cloud cover and relative humidity among them and consequently shows marked intermittency, volatility and uncertainty. Difficulties of considerable magnitude therefore arise for the dispatching and operation of power systems [<xref ref-type="bibr" rid="B5">5</xref>][<xref ref-type="bibr" rid="B6">6</xref>]. Forecasting PV power with high accuracy consequently represents an important prerequisite if grid dispatching is to become more intelligent and if power systems are to remain secure and stable in operation [<xref ref-type="bibr" rid="B7">7</xref>][<xref ref-type="bibr" rid="B8">8</xref>].</p>
      <p>Techniques founded on deep learning have been taken up widely for forecasting PV power in recent years, a development spurred by the fast progress of artificial intelligence. Of the models commonly adopted, the long short-term memory (LSTM) network holds a central place, for it succeeds in retaining dependencies that extend across long intervals of a time series [<xref ref-type="bibr" rid="B7">7</xref>]. The recurrent neural network (RNN), on the other hand, is a structure built for sequential inputs and is therefore well matched to data that possess temporal dependence. Drawing on both families, the combined RNN-LSTM model unites their respective strengths and in this way attains a higher level of temporal modelling capability [<xref ref-type="bibr" rid="B8">8</xref>]. Belonging to the field of ensemble learning [<xref ref-type="bibr" rid="B9">9</xref>], the extreme gradient boosting (XGBoost) algorithm combines high fitting precision with modest computational cost; it may therefore be used for PV power forecasting in its own right or else joined to the hybrid deep learning model, which yields the RNN-LSTM-XGBoost hybrid forecasting approach [<xref ref-type="bibr" rid="B5">5</xref>][<xref ref-type="bibr" rid="B10">10</xref>].</p>
      <p>The RNN-LSTM-XGBoost algorithm has gained acceptance as a mainstream forecasting option, yet comparatively few investigations have probed its behaviour systematically across a range of forecast horizons. Because the results scattered through the literature are fragmentary, they offer little on which a quantitative judgement of model performance might be founded. The analysis presented here therefore appraises the RNN-LSTM-XGBoost algorithm along three axes: the pipeline through which the data are processed, the architecture of the model itself, and the forecasting performance that results. The aim is to make clear how the algorithm behaves when put to practical use and to establish the working situations to which it is best adapted, thereby furnishing a point of reference of practical value to researchers and practitioners concerned with PV power forecasting [<xref ref-type="bibr" rid="B11">11</xref>][<xref ref-type="bibr" rid="B12">12</xref>].</p>
    </sec>
    <sec id="sec2">
      <title>2. Data Analysis and Processing</title>
      <sec id="sec2dot1">
        <title>2.1. Handling of Missing Values and Outliers</title>
        <p>The records of past generation at a PV plant, taken together with the meteorological quantities measured at the same location, provide the empirical foundation on which PV power forecasting depends. External disturbances of many kinds affect data acquisition in practice, so that raw records commonly hold both gaps and readings that are anomalous. Were such records passed to a model untreated, both training and forecasting would suffer a serious loss of accuracy. Three stages are therefore followed in the experiment reported below. Gaps are located and rebuilt through cubic spline interpolation; readings that are anomalous are afterwards detected and discarded according to the interquartile range (IQR) box-plot criterion; and only the records that survive this treatment are kept for the training of the model.</p>
      </sec>
      <sec id="sec2dot2">
        <title>2.2. Feature Selection and Correlation Analysis</title>
        <p>A PV plant is at one and the same time subject to several meteorological variables, and the magnitude of the response to each of them varies widely. Feature selection is consequently carried out so that only those input variables displaying a meaningful relation to PV output are retained, an operation that both protects the forecasting results from irrelevant disturbance and reduces the complexity of the model input. The Pearson correlation coefficient is in common use as an indicator of how strongly two variables are linearly associated, and it takes the form:</p>
        <disp-formula id="FD1">
          <label>(1)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtable>
                <mml:mtr>
                  <mml:mtd>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>ρ</mml:mi>
                        <mml:mrow>
                          <mml:mi>x</mml:mi>
                          <mml:mo>,</mml:mo>
                          <mml:mi>y</mml:mi>
                        </mml:mrow>
                      </mml:msub>
                      <mml:mo>=</mml:mo>
                      <mml:mfrac>
                        <mml:mrow>
                          <mml:msubsup>
                            <mml:mstyle mathsize="140%" displaystyle="true">
                              <mml:mo>∑</mml:mo>
                            </mml:mstyle>
                            <mml:mrow>
                              <mml:mi>i</mml:mi>
                              <mml:mo>=</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                            <mml:mi>n</mml:mi>
                          </mml:msubsup>
                          <mml:mrow>
                            <mml:mo>(</mml:mo>
                            <mml:mrow>
                              <mml:msub>
                                <mml:mi>x</mml:mi>
                                <mml:mi>i</mml:mi>
                              </mml:msub>
                              <mml:mo>−</mml:mo>
                              <mml:mover accent="true">
                                <mml:mi>x</mml:mi>
                                <mml:mo>¯</mml:mo>
                              </mml:mover>
                            </mml:mrow>
                            <mml:mo>)</mml:mo>
                          </mml:mrow>
                          <mml:mrow>
                            <mml:mo>(</mml:mo>
                            <mml:mrow>
                              <mml:msub>
                                <mml:mi>y</mml:mi>
                                <mml:mi>i</mml:mi>
                              </mml:msub>
                              <mml:mo>−</mml:mo>
                              <mml:mover accent="true">
                                <mml:mi>y</mml:mi>
                                <mml:mo>¯</mml:mo>
                              </mml:mover>
                            </mml:mrow>
                            <mml:mo>)</mml:mo>
                          </mml:mrow>
                        </mml:mrow>
                        <mml:mrow>
                          <mml:msqrt>
                            <mml:mrow>
                              <mml:msubsup>
                                <mml:mstyle mathsize="140%" displaystyle="true">
                                  <mml:mo>∑</mml:mo>
                                </mml:mstyle>
                                <mml:mrow>
                                  <mml:mi>i</mml:mi>
                                  <mml:mo>=</mml:mo>
                                  <mml:mn>1</mml:mn>
                                </mml:mrow>
                                <mml:mi>n</mml:mi>
                              </mml:msubsup>
                              <mml:msup>
                                <mml:mrow>
                                  <mml:mrow>
                                    <mml:mo>(</mml:mo>
                                    <mml:mrow>
                                      <mml:msub>
                                        <mml:mi>x</mml:mi>
                                        <mml:mi>i</mml:mi>
                                      </mml:msub>
                                      <mml:mo>−</mml:mo>
                                      <mml:mover accent="true">
                                        <mml:mi>x</mml:mi>
                                        <mml:mo>¯</mml:mo>
                                      </mml:mover>
                                    </mml:mrow>
                                    <mml:mo>)</mml:mo>
                                  </mml:mrow>
                                </mml:mrow>
                                <mml:mn>2</mml:mn>
                              </mml:msup>
                            </mml:mrow>
                          </mml:msqrt>
                          <mml:msqrt>
                            <mml:mrow>
                              <mml:msubsup>
                                <mml:mstyle mathsize="140%" displaystyle="true">
                                  <mml:mo>∑</mml:mo>
                                </mml:mstyle>
                                <mml:mrow>
                                  <mml:mi>i</mml:mi>
                                  <mml:mo>=</mml:mo>
                                  <mml:mn>1</mml:mn>
                                </mml:mrow>
                                <mml:mi>n</mml:mi>
                              </mml:msubsup>
                              <mml:msup>
                                <mml:mrow>
                                  <mml:mrow>
                                    <mml:mo>(</mml:mo>
                                    <mml:mrow>
                                      <mml:msub>
                                        <mml:mi>y</mml:mi>
                                        <mml:mi>i</mml:mi>
                                      </mml:msub>
                                      <mml:mo>−</mml:mo>
                                      <mml:mover accent="true">
                                        <mml:mi>y</mml:mi>
                                        <mml:mo>¯</mml:mo>
                                      </mml:mover>
                                    </mml:mrow>
                                    <mml:mo>)</mml:mo>
                                  </mml:mrow>
                                </mml:mrow>
                                <mml:mn>2</mml:mn>
                              </mml:msup>
                            </mml:mrow>
                          </mml:msqrt>
                        </mml:mrow>
                      </mml:mfrac>
                    </mml:mrow>
                  </mml:mtd>
                </mml:mtr>
              </mml:mtable>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where: <inline-formula><mml:math><mml:mrow><mml:msub><mml:mi> x </mml:mi><mml:mi> i </mml:mi></mml:msub><mml:mo> , </mml:mo><mml:msub><mml:mi> y </mml:mi><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denotes the <italic>i</italic>-th observation of the variable <inline-formula><mml:math><mml:mrow><mml:mi> x </mml:mi><mml:mo> , </mml:mo><mml:mi> y </mml:mi></mml:mrow></mml:math></inline-formula> ; <inline-formula><mml:math><mml:mrow><mml:mover accent="true"><mml:mi> x </mml:mi><mml:mo> ¯ </mml:mo></mml:mover><mml:mo> , </mml:mo><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ¯ </mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> denotes the mean value of the variable <inline-formula><mml:math display="inline"><mml:mrow><mml:mi> x </mml:mi><mml:mo> , </mml:mo><mml:mi> y </mml:mi></mml:mrow></mml:math></inline-formula> ; <inline-formula><mml:math><mml:mi> n </mml:mi></mml:math></inline-formula> denotes the total number of samples; and <inline-formula><mml:math><mml:mrow><mml:msub><mml:mi> ρ </mml:mi><mml:mrow><mml:mi> x </mml:mi><mml:mo> , </mml:mo><mml:mi> y </mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> denotes correlation coefficient of the variable <inline-formula><mml:math><mml:mrow><mml:mi> x </mml:mi><mml:mo> , </mml:mo><mml:mi> y </mml:mi></mml:mrow></mml:math></inline-formula> .</p>
        <p>Values of the Pearson correlation coefficient lie between −1 and 1. A positive coefficient signifies that the two variables move in the same direction, whereas a negative coefficient signifies that they move in opposite directions. How closely the two variables are related is indicated by the magnitude of the coefficient: the nearer that magnitude approaches 1, the stronger the association.</p>
        <p><bold>Table 1</bold> lists the coefficients obtained. Air temperature, diffuse horizontal irradiance (DHI), direct normal irradiance (DNI) and the wind speed measured at 10 m are all strongly and positively related to the actual power, while azimuth, dew point temperature, relative humidity and zenith angle display strong negative relations with it. The remaining candidates, cloud opacity, atmospheric precipitable water, snow depth and the wind direction at 10 m, yield coefficients that are too small to be of use and are accordingly treated as irrelevant and discarded. The input features adopted in this experiment are consequently air temperature, DHI, DNI, wind speed at 10 m, azimuth, relative humidity and zenith angle.</p>
      </sec>
      <sec id="sec2dot3">
        <title>2.3. Dataset Partitioning</title>
        <p>PV generation displays a marked diurnal pattern: no power whatsoever is produced during the night, when sunlight is absent. Records whose actual output is zero must accordingly be removed before training commences, so that observations of zero power drawn from the non-generating hours are prevented from distorting the accuracy of the model.</p>
        <p>It is a sensible division of the dataset that permits the generalisation ability of a deep learning model to be assessed, and the same division also provides protection against overfitting. So that both the operating performance and the forecasting accuracy of each model may be improved, the preprocessed records are apportioned among three parts in the ratio 8:1:1. The part reserved for training serves to learn the parameters of the model, the part reserved for validation is kept for the tuning of hyperparameters, and the part reserved for testing is withheld until the final assessment of forecasting performance is made.</p>
        <p><bold>Table 1</bold><bold>.</bold>Pearson correlation coefficients between meteorological factors and actual power.</p>
        <table-wrap id="tbl1">
          <label>Table 1</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <bold>Meteorological</bold>
                  <bold>variable</bold>
                </td>
                <td>
                  <bold>Correlation</bold>
                  <bold>coefficient</bold>
                </td>
              </tr>
              <tr>
                <td>Air temperature</td>
                <td>0.69</td>
              </tr>
              <tr>
                <td>Azimuth</td>
                <td>−0.52</td>
              </tr>
              <tr>
                <td>Cloud opacity</td>
                <td>−0.21</td>
              </tr>
              <tr>
                <td>DHI (diffuse horizontal irradiance)</td>
                <td>0.72</td>
              </tr>
              <tr>
                <td>DNI (direct normal irradiance)</td>
                <td>0.97</td>
              </tr>
              <tr>
                <td>Atmospheric precipitable water</td>
                <td>−0.28</td>
              </tr>
              <tr>
                <td>Relative humidity</td>
                <td>−0.74</td>
              </tr>
              <tr>
                <td>Snow depth</td>
                <td>−0.10</td>
              </tr>
              <tr>
                <td>Wind direction at 10 m</td>
                <td>0.40</td>
              </tr>
              <tr>
                <td>Wind speed at 10 m</td>
                <td>0.83</td>
              </tr>
              <tr>
                <td>Zenith angle</td>
                <td>−0.79</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
      </sec>
    </sec>
    <sec id="sec3">
      <title>3. Analysis of the Forecasting Model</title>
      <sec id="sec3dot1">
        <title>3.1. Principle of the RNN-LSTM-XGBoost Forecasting Algorithm</title>
        <p>The recurrent neural network (RNN) forms a family of networks built expressly for sequential data. Through its internal “memory”, an RNN is able to carry information from earlier time steps forward so that it influences the output produced at the current step. The long short-term memory (LSTM) network represents a significant refinement of the RNN and was devised to overcome the vanishing and exploding gradient problems that affect conventional recurrent networks. XGBoost, for its part, is an efficient and flexible gradient boosting algorithm that ranks among the best-performing methods currently used in industrial practice [<xref ref-type="bibr" rid="B12">12</xref>].</p>
        <p>By bringing the RNN and the LSTM together, the combined RNN-LSTM model exploits the strengths of both. The RNN is adept at modelling short-range temporal behaviour and reacts rapidly to local variations within a sequence, whereas the LSTM excels at capturing dependencies that extend over longer spans. The two are complementary, and their union enhances the capacity of the model to extract features at differing time scales from PV power time series.</p>
        <p>XGBoost is an efficient and flexible gradient boosting algorithm. Derived from the gradient boosted decision tree (GBDT), it retains the additive, forward-stagewise boosting framework of GBDT while incorporating extensive engineering optimizations and algorithmic improvements, and it has been widely adopted in industrial applications, where it generally delivers strong performance. </p>
        <p>Traditional GBDT relies solely on first-order gradient information. XGBoost, in contrast, applies a second-order Taylor expansion to the loss function and incorporates a regularization penalty into its objective, thereby limiting model complexity, improving generalization, and mitigating overfitting to the training data.</p>
        <p>RNN-LSTM-XGBoost is a forecasting approach that merges deep learning with ensemble learning. Taking the RNN-LSTM deep learning model as its starting point, it incorporates the XGBoost ensemble learning model and combines the predictive strengths of the two through a combination strategy [<xref ref-type="bibr" rid="B13">13</xref>]. </p>
        <p>A weighted fusion scheme is applied to the outputs of the two models in order to arrive at the final forecast. To determine the optimal fusion ratio, a ratio of 0.4 RNN-LSTM to 0.6 XGBoost was adopted a priori as the starting point st first, reflecting the stronger standalone performance of the tree ensemble on this dataset and the role of the neural model as a feature generator [<xref ref-type="bibr" rid="B7">7</xref>][<xref ref-type="bibr" rid="B12">12</xref>]. The ratio was then verified by a sensitivity analysis in which <italic>α</italic>, the weight of the neural forecast, was varied from 0 to 1 in steps of 0.05 and the validation period was scored with MAE, RMSE and R<sup>2</sup> for each value. The validation MAE is minimised at <italic>α</italic> = 0.25 (minimum MAE value, 0.9350) and the validation RMSE at <italic>α</italic> = 0.40 (minimum RMSE value, 2.1579), while R<sup>2</sup> remains constant at 0.9959 for <italic>α</italic> between 0.20 and 0.65. The pre-specified value <italic>α</italic> = 0.40 therefore coincides with the minimum of the validation RMSE, so it was retained. And the specific test results for the prediction weight <italic>α</italic> as shown in <bold>Table 2</bold>:</p>
        <p><bold>Table 2.</bold>Results for the prediction weight <inline-formula><mml:math><mml:mi> α </mml:mi></mml:math></inline-formula> .</p>
        <table-wrap id="tbl2">
          <label>Table 2</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <inline-formula>
                    <mml:math>
                      <mml:mi>α</mml:mi>
                    </mml:math>
                  </inline-formula>
                </td>
                <td>
                  <inline-formula>
                    <mml:math>
                      <mml:mrow>
                        <mml:mn>1</mml:mn>
                        <mml:mo>−</mml:mo>
                        <mml:mi>α</mml:mi>
                      </mml:mrow>
                    </mml:math>
                  </inline-formula>
                </td>
                <td>
                  <bold>MAE/MW</bold>
                </td>
                <td>
                  <bold>RMSE/MW</bold>
                </td>
                <td>
                  <italic>
                    <bold>R</bold>
                  </italic>
                  <bold>
                    <sup>2</sup>
                  </bold>
                </td>
              </tr>
              <tr>
                <td>0.00</td>
                <td>1.00</td>
                <td>0.9609</td>
                <td>2.2220</td>
                <td>0.9957</td>
              </tr>
              <tr>
                <td>0.05</td>
                <td>0.95</td>
                <td>0.9515</td>
                <td>2.2076</td>
                <td>0.9957</td>
              </tr>
              <tr>
                <td>0.10</td>
                <td>0.90</td>
                <td>0.9443</td>
                <td>2.1949</td>
                <td>0.9958</td>
              </tr>
              <tr>
                <td>0.15</td>
                <td>0.85</td>
                <td>0.9393</td>
                <td>2.1841</td>
                <td>0.9958</td>
              </tr>
              <tr>
                <td>0.20</td>
                <td>0.80</td>
                <td>0.9363</td>
                <td>2.1751</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.25</td>
                <td>0.75</td>
                <td>0.9350</td>
                <td>2.1680</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.30</td>
                <td>0.70</td>
                <td>0.9355</td>
                <td>2.1627</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.35</td>
                <td>0.65</td>
                <td>0.9373</td>
                <td>2.1593</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.40</td>
                <td>0.60</td>
                <td>0.9403</td>
                <td>2.1579</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.45</td>
                <td>0.55</td>
                <td>0.9447</td>
                <td>2.1583</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.50</td>
                <td>0.50</td>
                <td>0.9503</td>
                <td>2.1606</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.55</td>
                <td>0.45</td>
                <td>0.9572</td>
                <td>2.1648</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.60</td>
                <td>0.40</td>
                <td>0.9652</td>
                <td>2.1709</td>
                <td>0.9959</td>
              </tr>
              <tr>
                <td>0.65</td>
                <td>0.35</td>
                <td>0.9745</td>
                <td>2.1789</td>
                <td>0.9958</td>
              </tr>
              <tr>
                <td>0.70</td>
                <td>0.30</td>
                <td>0.9850</td>
                <td>2.1887</td>
                <td>0.9958</td>
              </tr>
              <tr>
                <td>0.75</td>
                <td>0.25</td>
                <td>0.9966</td>
                <td>2.2003</td>
                <td>0.9958</td>
              </tr>
              <tr>
                <td>0.80</td>
                <td>0.20</td>
                <td>1.0092</td>
                <td>2.2137</td>
                <td>0.9957</td>
              </tr>
              <tr>
                <td>0.85</td>
                <td>0.15</td>
                <td>1.0227</td>
                <td>2.2289</td>
                <td>0.9956</td>
              </tr>
              <tr>
                <td>0.90</td>
                <td>0.10</td>
                <td>1.0373</td>
                <td>2.2458</td>
                <td>0.9956</td>
              </tr>
              <tr>
                <td>0.95</td>
                <td>0.05</td>
                <td>1.0528</td>
                <td>2.2644</td>
                <td>0.9955</td>
              </tr>
              <tr>
                <td>1.00</td>
                <td>0.00</td>
                <td>1.0692</td>
                <td>2.2846</td>
                <td>0.9954</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>In conclusion, the weighted fusion strategy in the present experiment is adopted as the actual forecasting output, and the weighting formula for the two models is:</p>
        <disp-formula id="FD2">
          <label>(2)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtable>
                <mml:mtr>
                  <mml:mtd>
                    <mml:mrow>
                      <mml:mover accent="true">
                        <mml:mi>y</mml:mi>
                        <mml:mo>^</mml:mo>
                      </mml:mover>
                      <mml:mo>=</mml:mo>
                      <mml:mn>0.4</mml:mn>
                      <mml:mo>×</mml:mo>
                      <mml:msub>
                        <mml:mrow>
                          <mml:mtext>RNN_LSTM</mml:mtext>
                        </mml:mrow>
                        <mml:mrow>
                          <mml:mtext>pred</mml:mtext>
                        </mml:mrow>
                      </mml:msub>
                      <mml:mo>+</mml:mo>
                      <mml:mn>0.6</mml:mn>
                      <mml:mo>×</mml:mo>
                      <mml:msub>
                        <mml:mrow>
                          <mml:mtext>XGB</mml:mtext>
                        </mml:mrow>
                        <mml:mrow>
                          <mml:mtext>pred</mml:mtext>
                        </mml:mrow>
                      </mml:msub>
                    </mml:mrow>
                  </mml:mtd>
                </mml:mtr>
              </mml:mtable>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where: <inline-formula><mml:math><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ^ </mml:mo></mml:mover></mml:math></inline-formula> denotes the weighted forecasting result, <inline-formula><mml:math><mml:mrow><mml:msub><mml:mrow><mml:mtext> RNN_LSTM </mml:mtext></mml:mrow><mml:mrow><mml:mtext> pred </mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> denotes the forecasting result of the RNN-LSTM deep learning model, and <inline-formula><mml:math><mml:mrow><mml:msub><mml:mrow><mml:mtext> XGB </mml:mtext></mml:mrow><mml:mrow><mml:mtext> pred </mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> denotes the forecasting result of the XGBoost ensemble learning model. The working principle of the forecasting algorithm is shown in <xref ref-type="fig" rid="fig1">Figure 1</xref>:</p>
        <fig id="fig1">
          <label>Figure 1</label>
          <graphic xlink:href="https://html.scirp.org/file/1733697-rId42.jpeg?20261106045229" />
        </fig>
        <p><bold>Figure 1</bold><bold>.</bold>Working principle of the RNN-LSTM-XGBoost model.</p>
      </sec>
      <sec id="sec3dot2">
        <title>3.2. Theoretical Analysis of the Forecasting Algorithm</title>
        <p>A deep learning component (RNN-LSTM) and an ensemble learning component (XGBoost) are united within the RNN-LSTM-XGBoost combined forecasting model to give a single hybrid architecture. Considerable capacity for feature extraction and for non-linear fitting is possessed by the resulting structure, which makes it especially suitable for PV forecasting tasks marked by strong volatility and pronounced intermittency [<xref ref-type="bibr" rid="B3">3</xref>][<xref ref-type="bibr" rid="B10">10</xref>][<xref ref-type="bibr" rid="B11">11</xref>].</p>
        <p>The RNN-LSTM-XGBoost combined model is endowed with a large parameter count and a correspondingly large capacity. Short-range fluctuations and long-range trends within a sequence can thus both be captured by it, and patterns of greater complexity can be learned. The danger of overfitting that accompanies a single model is reduced to some degree when two models of different types are merged through a combination strategy, and that same strategy permits the outputs of the two models to be balanced against one another, so that overall robustness is improved [<xref ref-type="bibr" rid="B10">10</xref>][<xref ref-type="bibr" rid="B14">14</xref>].</p>
        <p>Taken as a whole, then, the RNN-LSTM-XGBoost combined model may be said to generalise well, and the results it yields in training are both accurate and credible.</p>
      </sec>
    </sec>
    <sec id="sec4">
      <title>4. Performance Evaluation of the Forecasting Model</title>
      <sec id="sec4dot1">
        <title>4.1. Evaluation Metrics</title>
        <p>Four metrics of a multi-dimensional character are adopted in this work so that the forecasting algorithm may be appraised from several directions at once, namely the mean absolute error (MAE), the root mean square error (RMSE), the mean absolute percentage error (MAPE) and the coefficient of determination (<italic>R</italic><sup>2</sup>) [<xref ref-type="bibr" rid="B15">15</xref>][<xref ref-type="bibr" rid="B16">16</xref>]. Definitions of the four are given below:</p>
        <disp-formula id="FD3">
          <label>(3)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtext>MAE</mml:mtext>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mn>1</mml:mn>
                <mml:mi>n</mml:mi>
              </mml:mfrac>
              <mml:munderover>
                <mml:mstyle displaystyle="true" mathsize="140%">
                  <mml:mo>∑</mml:mo>
                </mml:mstyle>
                <mml:mrow>
                  <mml:mi>i</mml:mi>
                  <mml:mo>=</mml:mo>
                  <mml:mn>1</mml:mn>
                </mml:mrow>
                <mml:mi>n</mml:mi>
              </mml:munderover>
              <mml:mrow>
                <mml:mo>|</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>y</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mo>−</mml:mo>
                  <mml:msub>
                    <mml:mover accent="true">
                      <mml:mi>y</mml:mi>
                      <mml:mo>^</mml:mo>
                    </mml:mover>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                </mml:mrow>
                <mml:mo>|</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD4">
          <label>(4)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtable>
                <mml:mtr>
                  <mml:mtd>
                    <mml:mrow>
                      <mml:mtext>RMSE</mml:mtext>
                      <mml:mo>=</mml:mo>
                      <mml:msqrt>
                        <mml:mrow>
                          <mml:mfrac>
                            <mml:mn>1</mml:mn>
                            <mml:mi>n</mml:mi>
                          </mml:mfrac>
                          <mml:munderover>
                            <mml:mstyle displaystyle="true" mathsize="140%">
                              <mml:mo>∑</mml:mo>
                            </mml:mstyle>
                            <mml:mrow>
                              <mml:mi>i</mml:mi>
                              <mml:mo>=</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                            <mml:mi>n</mml:mi>
                          </mml:munderover>
                          <mml:msup>
                            <mml:mrow>
                              <mml:mrow>
                                <mml:mo>(</mml:mo>
                                <mml:mrow>
                                  <mml:msub>
                                    <mml:mi>y</mml:mi>
                                    <mml:mi>i</mml:mi>
                                  </mml:msub>
                                  <mml:mo>−</mml:mo>
                                  <mml:msub>
                                    <mml:mover accent="true">
                                      <mml:mi>y</mml:mi>
                                      <mml:mo>^</mml:mo>
                                    </mml:mover>
                                    <mml:mi>i</mml:mi>
                                  </mml:msub>
                                </mml:mrow>
                                <mml:mo>)</mml:mo>
                              </mml:mrow>
                            </mml:mrow>
                            <mml:mn>2</mml:mn>
                          </mml:msup>
                        </mml:mrow>
                      </mml:msqrt>
                    </mml:mrow>
                  </mml:mtd>
                </mml:mtr>
              </mml:mtable>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD5">
          <label>(5)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtable>
                <mml:mtr>
                  <mml:mtd>
                    <mml:mrow>
                      <mml:mtext>MAPE</mml:mtext>
                      <mml:mo>=</mml:mo>
                      <mml:mfrac>
                        <mml:mrow>
                          <mml:mn>100</mml:mn>
                          <mml:mi>%</mml:mi>
                        </mml:mrow>
                        <mml:mi>n</mml:mi>
                      </mml:mfrac>
                      <mml:munderover>
                        <mml:mstyle displaystyle="true" mathsize="140%">
                          <mml:mo>∑</mml:mo>
                        </mml:mstyle>
                        <mml:mrow>
                          <mml:mi>i</mml:mi>
                          <mml:mo>=</mml:mo>
                          <mml:mn>1</mml:mn>
                        </mml:mrow>
                        <mml:mi>n</mml:mi>
                      </mml:munderover>
                      <mml:mrow>
                        <mml:mo>|</mml:mo>
                        <mml:mrow>
                          <mml:mfrac>
                            <mml:mrow>
                              <mml:msub>
                                <mml:mi>y</mml:mi>
                                <mml:mi>i</mml:mi>
                              </mml:msub>
                              <mml:mo>−</mml:mo>
                              <mml:msub>
                                <mml:mover accent="true">
                                  <mml:mi>y</mml:mi>
                                  <mml:mo>^</mml:mo>
                                </mml:mover>
                                <mml:mi>i</mml:mi>
                              </mml:msub>
                            </mml:mrow>
                            <mml:mrow>
                              <mml:msub>
                                <mml:mi>y</mml:mi>
                                <mml:mi>i</mml:mi>
                              </mml:msub>
                            </mml:mrow>
                          </mml:mfrac>
                        </mml:mrow>
                        <mml:mo>|</mml:mo>
                      </mml:mrow>
                    </mml:mrow>
                  </mml:mtd>
                </mml:mtr>
              </mml:mtable>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD6">
          <label>(6)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtable>
                <mml:mtr>
                  <mml:mtd>
                    <mml:mrow>
                      <mml:msup>
                        <mml:mi>R</mml:mi>
                        <mml:mn>2</mml:mn>
                      </mml:msup>
                      <mml:mo>=</mml:mo>
                      <mml:mn>1</mml:mn>
                      <mml:mo>−</mml:mo>
                      <mml:mfrac>
                        <mml:mrow>
                          <mml:msubsup>
                            <mml:mstyle mathsize="140%" displaystyle="true">
                              <mml:mo>∑</mml:mo>
                            </mml:mstyle>
                            <mml:mrow>
                              <mml:mi>i</mml:mi>
                              <mml:mo>=</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                            <mml:mi>n</mml:mi>
                          </mml:msubsup>
                          <mml:msup>
                            <mml:mrow>
                              <mml:mrow>
                                <mml:mo>(</mml:mo>
                                <mml:mrow>
                                  <mml:msub>
                                    <mml:mi>y</mml:mi>
                                    <mml:mi>i</mml:mi>
                                  </mml:msub>
                                  <mml:mo>−</mml:mo>
                                  <mml:msub>
                                    <mml:mover accent="true">
                                      <mml:mi>y</mml:mi>
                                      <mml:mo>^</mml:mo>
                                    </mml:mover>
                                    <mml:mi>i</mml:mi>
                                  </mml:msub>
                                </mml:mrow>
                                <mml:mo>)</mml:mo>
                              </mml:mrow>
                            </mml:mrow>
                            <mml:mn>2</mml:mn>
                          </mml:msup>
                        </mml:mrow>
                        <mml:mrow>
                          <mml:msubsup>
                            <mml:mstyle mathsize="140%" displaystyle="true">
                              <mml:mo>∑</mml:mo>
                            </mml:mstyle>
                            <mml:mrow>
                              <mml:mi>i</mml:mi>
                              <mml:mo>=</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                            <mml:mi>n</mml:mi>
                          </mml:msubsup>
                          <mml:msup>
                            <mml:mrow>
                              <mml:mrow>
                                <mml:mo>(</mml:mo>
                                <mml:mrow>
                                  <mml:msub>
                                    <mml:mi>y</mml:mi>
                                    <mml:mi>i</mml:mi>
                                  </mml:msub>
                                  <mml:mo>−</mml:mo>
                                  <mml:mover accent="true">
                                    <mml:mi>y</mml:mi>
                                    <mml:mo>¯</mml:mo>
                                  </mml:mover>
                                </mml:mrow>
                                <mml:mo>)</mml:mo>
                              </mml:mrow>
                            </mml:mrow>
                            <mml:mn>2</mml:mn>
                          </mml:msup>
                        </mml:mrow>
                      </mml:mfrac>
                    </mml:mrow>
                  </mml:mtd>
                </mml:mtr>
              </mml:mtable>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where: <inline-formula><mml:math><mml:mrow><mml:msub><mml:mi> y </mml:mi><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denotes the <italic>i</italic>-th true value, <inline-formula><mml:math><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denotes the <italic>i</italic>-th forecast value, <inline-formula><mml:math><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ¯ </mml:mo></mml:mover></mml:math></inline-formula> denotes the mean of the true values, and <inline-formula><mml:math><mml:mi> n </mml:mi></mml:math></inline-formula> denotes the number of data samples.</p>
        <p>MAE conveys the average magnitude of the forecasting error without regard to sign, which renders it well suited to judging accuracy in overall terms; a smaller figure is to be preferred. By giving greater weight to large discrepancies, RMSE is able to describe how widely the forecasting errors are spread; here too a smaller figure is better. Stating the relative error as a percentage, MAPE allows quantities whose magnitudes differ greatly to be placed side by side, and a smaller value is again desirable. The coefficient of determination expresses the share of the variance in the true values that the forecasts can account for, so that a value approaching 1 signals a closer fit.</p>
        <p>Two distinct sample populations are used in this study and are kept separate throughout. The estimation population is the set of records used to fit the models; in the preprocessing stage, records with zero output are removed from it, because they correspond to night-time intervals in which generation is structurally absent and their inclusion would only bias the fit towards the trivial solution. The evaluation population is the complete 15-minute grid of the forecast period, in which night-time zero-output intervals are retained. Retaining them is necessary because the object of the assessment is a continuous power series rather than a daylight-only series, and because the error that matters operationally is defined at every instant, including intervals in which generation is zero. All metrics reported below are therefore computed on the evaluation population; the removal of zero-output records affects only model fitting and never the denominator of any reported metric.</p>
        <p>Let the evaluation population contain <inline-formula><mml:math><mml:mi> n </mml:mi></mml:math></inline-formula> samples with measured values <inline-formula><mml:math><mml:mrow><mml:msub><mml:mi> y </mml:mi><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and forecasts <inline-formula><mml:math><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> , and let <inline-formula><mml:math><mml:mrow><mml:msub><mml:mi> S </mml:mi><mml:mi> k </mml:mi></mml:msub><mml:mo> = </mml:mo><mml:mrow><mml:mo> { </mml:mo><mml:mrow><mml:mi> i </mml:mi><mml:mo> | </mml:mo><mml:msub><mml:mi> y </mml:mi><mml:mi> i </mml:mi></mml:msub><mml:mo> &gt; </mml:mo><mml:mi> k </mml:mi><mml:mtext>   </mml:mtext><mml:mtext> MW </mml:mtext></mml:mrow><mml:mo> } </mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> , <inline-formula><mml:math><mml:mi> k </mml:mi></mml:math></inline-formula> donates threshold of MAPE. The four metrics are evaluated as Eq.(3) - (6): MAE, RMSE and <italic>R</italic><sup>2</sup> are all computed on the full set of <inline-formula><mml:math><mml:mi> n </mml:mi></mml:math></inline-formula> samples. MAPE is the only one of the four whose value is governed by the denominator, so exact and near-zero values require an explicit convention. The convention adopted here is exclusion, not substitution, the adjustments to MAPE are as follows:</p>
        <disp-formula id="FD7">
          <label>(7)</label>
          <mml:math display="inline">
            <mml:mrow>
              <mml:mtext>MAPE</mml:mtext>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mn>100</mml:mn>
                </mml:mrow>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>|</mml:mo>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>S</mml:mi>
                        <mml:mi>k</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo>|</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mfrac>
              <mml:munder>
                <mml:mstyle displaystyle="true" mathsize="140%">
                  <mml:mo>∑</mml:mo>
                </mml:mstyle>
                <mml:mrow>
                  <mml:mi>i</mml:mi>
                  <mml:mo>∈</mml:mo>
                  <mml:msub>
                    <mml:mi>S</mml:mi>
                    <mml:mi>k</mml:mi>
                  </mml:msub>
                </mml:mrow>
              </mml:munder>
              <mml:mrow>
                <mml:mo>|</mml:mo>
                <mml:mrow>
                  <mml:mfrac>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>y</mml:mi>
                        <mml:mi>i</mml:mi>
                      </mml:msub>
                      <mml:mo>−</mml:mo>
                      <mml:msub>
                        <mml:mover accent="true">
                          <mml:mi>y</mml:mi>
                          <mml:mo>^</mml:mo>
                        </mml:mover>
                        <mml:mi>i</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>y</mml:mi>
                        <mml:mi>i</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                  </mml:mfrac>
                </mml:mrow>
                <mml:mo>|</mml:mo>
              </mml:mrow>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:msub>
                <mml:mi>S</mml:mi>
                <mml:mi>k</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mrow>
                <mml:mo>{</mml:mo>
                <mml:mrow>
                  <mml:mi>i</mml:mi>
                  <mml:mo>|</mml:mo>
                  <mml:msub>
                    <mml:mi>y</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mo>&gt;</mml:mo>
                  <mml:mi>k</mml:mi>
                  <mml:mtext>
                     
                  </mml:mtext>
                  <mml:mtext>MW</mml:mtext>
                </mml:mrow>
                <mml:mo>}</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>No artificial floor <inline-formula><mml:math><mml:mi> ε </mml:mi></mml:math></inline-formula> is added to the denominator. Substitution was rejected because the outcome then depends entirely on an arbitrary <inline-formula><mml:math><mml:mi> ε </mml:mi></mml:math></inline-formula> , the metric would quantify the choice of <inline-formula><mml:math><mml:mi> ε </mml:mi></mml:math></inline-formula> rather than the model. MAE, RMSE, R<sup>2</sup> are bounded at zero-output samples and are therefore computed over all n samples, including the zeros.</p>
      </sec>
      <sec id="sec4dot2">
        <title>4.2. Design of the Comparative Analysis</title>
        <p>PV power forecasting is often required over more than one time scale, so that comparisons can be drawn across scales between the short term (24 h), the medium term (72 h) and the long term (1 week). The statistical character of a power series alters appreciably from one scale to another, and a comparison of performance across forecasting scales accordingly supplies a basis on which the appropriate scale may be selected in practice.</p>
        <p>PV forecasting is subject to many meteorological influences and therefore displays marked intermittency, volatility and uncertainty, from which it follows that the forecast curve and the actual power curve should be set against one another. Appreciating how closely the forecast curve tracks the measured one, and preparing plots that compare the two curves over various periods, makes the performance of the forecasting algorithm directly evident and furnishes a practical reference for engineering deployment.</p>
      </sec>
      <sec id="sec4dot3">
        <title>4.3. Residual Analysis</title>
        <p>By residual is meant the amount by which the actual observation differs from the value forecast or estimated by the model. Examining residuals in the context of PV power forecasting makes it possible to judge how well the model fits the data, a smaller residual indicating better performance. The residual is defined as:</p>
        <disp-formula id="FD8">
          <label>(8)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>e</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:msub>
                <mml:mi>y</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mo>−</mml:mo>
              <mml:msub>
                <mml:mover accent="true">
                  <mml:mi>y</mml:mi>
                  <mml:mo>^</mml:mo>
                </mml:mover>
                <mml:mi>i</mml:mi>
              </mml:msub>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <inline-formula><mml:math><mml:mrow><mml:msub><mml:mi> y </mml:mi><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> stands for the <italic>i</italic>-th true value, <inline-formula><mml:math><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> stands for the <italic>i</italic>-th forecast value, and <inline-formula><mml:math><mml:mrow><mml:msub><mml:mi> e </mml:mi><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> stands for the <italic>i</italic>-th residual; <inline-formula><mml:math><mml:mrow><mml:mrow><mml:mo> | </mml:mo><mml:mrow><mml:msub><mml:mi> e </mml:mi><mml:mi> i </mml:mi></mml:msub></mml:mrow><mml:mo> | </mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> the residual measures how far the forecast departs from the true value, <inline-formula><mml:math><mml:mrow><mml:msub><mml:mi> e </mml:mi><mml:mi> i </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> a positive value of it meaning under-prediction and a negative value meaning over-prediction.</p>
        <p>The manner in which residuals are distributed throws light on both the systematic and the random portion of the forecasting error, and an analysis along these lines is consequently in wide use. Four aspects are usually taken into account: whether the mean equals zero, whether the variance remains constant, whether the distribution is normal, and whether the residuals are mutually independent [<xref ref-type="bibr" rid="B14">14</xref>][<xref ref-type="bibr" rid="B17">17</xref>].</p>
      </sec>
      <sec id="sec4dot4">
        <title>4.4. Framework of the Comparative Analysis</title>
        <p>Drawing on the evaluation metrics and analytical dimensions set out above, the following framework for comparative analysis is established in this paper:</p>
        <p>To begin with, the short, medium and long terms are taken as the time scales, and the overall forecasting performance achieved at each is set against the others on the basis of one common dataset and one common set of metrics; the assessment draws jointly on MAE, RMSE, MAPE and R<sup>2</sup>.</p>
        <p>Comparison plots of the forecast and actual power curves are then produced for each time scale, so that the groups can be distinguished directly in terms of how well they follow the trend of the power signal, how reliably they capture peaks and how promptly they react to abrupt changes.</p>
        <p>Lastly, the residuals produced by the forecasting algorithm are examined with respect to their distribution, the mean, variance and shape of the residual distribution being considered, in order to judge how much of the forecasting deviation is systematic and how much is random.</p>
      </sec>
    </sec>
    <sec id="sec5">
      <title>5. Validation and Analysis of the Forecasting Model</title>
      <sec id="sec5dot1">
        <title>5.1. Experimental Procedure</title>
        <p>A fixed workflow is followed by the experiments reported here. It was adopted so that differences in working performance among the forecasting algorithms might be brought out while the influence of extraneous factors was excluded:</p>
        <p>Zero values are first eliminated from the raw dataset and the features chosen; missing entries are afterwards compensated for and anomalous records discarded, which brings the preprocessing of the data to completion.</p>
        <p>It should be noticed that during the preprocessing of dataset. To prevent information leakage during preprocessing, the data-handling procedure follows a strict split-then-fit order. The dataset is first partitioned by year into a training period (2015-2017), a validation period (2018) and a test period (2019). Every quantity that requires estimation—the interpolation function, feature correlations, outlier thresholds, the standardisation scalers and the power cap—is subsequently computed on the training period alone and applied to the validation and test periods as a frozen constant; no test-period observation enters any parameter estimate.</p>
        <p>The interpolation step has three properties. First, it is executed within each split independently, so observations from one split are never used to fill another. Second, it is defined along the true timestamp axis rather than the record index, which prevents the temporal distortion that arises when sampling intervals are unequal. Third, it is forward-only and step-limited: only gaps of at most two consecutive missing steps are filled, and no backward filling is used anywhere in the pipeline.</p>
        <p>The forecasts that emerge are then subjected to numerical evaluation, curve comparison and residual analysis at each of the three time scales (short, medium and long term), and from these a comprehensive assessment of the working performance of the model is finally assembled. This workflow is depicted in <xref ref-type="fig" rid="fig2">Figure 2</xref>.</p>
        <fig id="fig2">
          <label>Figure 2</label>
          <graphic xlink:href="https://html.scirp.org/file/1733697-rId89.jpeg?20261106045230" />
        </fig>
        <p><bold>Figure 2.</bold>Flowchart of the experimental procedure.</p>
      </sec>
      <sec id="sec5dot2">
        <title>5.2. Numerical Evaluation of Forecasting Performance</title>
        <p>The measurements analysed in this work were supplied by a PV power station in Yumen City, Gansu Province, and they cover the years from 2015 to 2020. The dataset was obtained from publicly available online sources. It is sampled at 15-minute intervals, and the data of actual power is derived from irradiance. However, the installed capacity is not explicitly stated in the dateset.</p>
        <p>Records of zero power recorded at night, together with observations that appeared anomalous, were discarded first. The surviving records were then apportioned among three subsets in the ratio 8:1:1: 17,152 records from 2015-2017 were used for training, 2144 records from 2018 for validation, and 2145 records from 2019 for testing. The entire 2020 dataset was set aside as an out-of-sample target that the model never sees during training. This arrangement was adopted so that the evaluation would reflect genuine generalisation ability.</p>
        <p>Preprocessing follows a split-then-fit principle. The dataset is partitioned by year into training (2015-2017), validation (2018) and test (2019) periods, and every subsequent statistic is estimated on the training period alone and then applied to the other splits as a frozen constant: interpolation is carried out within each split, along the true time axis, in a forward-only and step-limited manner (≤2 steps); feature correlations are computed solely on daytime training samples, with the final seven predictors fixed a priori; and the IQR thresholds are derived from the quantiles of daytime training samples, with no test-period data entering their estimation. The resulting outlier rates are 4.88%, 4.59% and 7.06% for the three splits, the difference reflecting inter-annual meteorological variability rather than adaptation of the thresholds to the test period.</p>
        <p>For sequence construction, outliers are flagged as missing rather than deleted, so the full 15-minute time axis is preserved; gaps of at most two steps are filled by time-based interpolation, whereas longer gaps retain a missing mask and are not imputed. Sliding windows are built within each split only, and a window is retained only if all 96 steps are complete and its first-to-last time span equals exactly 95 × 15 minutes (23.75 h); windows containing gaps or temporal discontinuities are discarded. </p>
        <p>For the RNN-LSTM branch, three recurrent stages are stacked in progressive order: SimpleRNN with 64 units, then a bidirectional LSTM with 128 units, and finally an LSTM with 64 units. Each stage is followed by batch normalisation and then by a Dropout layer whose rate lies between 0.2 and 0.3. The dense part of the network is shaped Dense(64)→Dense(32)→Dense(1). Optimisation uses Adam, with the learning rate set to 0.001, 64 samples in each batch, and at most 150 iterations. Two safeguards are added: early stopping with a patience of 20, and learning rate decay with a factor of 0.5 and a patience of 10.</p>
        <p>For the XGBoost branch, 500 trees are grown to a greatest depth of 6, with a learning rate of 0.05 and sampling ratios of 0.8 for both rows and columns, while the L1 and L2 regularisation coefficients are set to 0.1 and 1.0. To combine the two branches, Equation (5) assigns a weight of 0.4 to the RNN-LSTM forecast and a weight of 0.6 to the XGBoost forecast.</p>
        <p>Forecasting proceeds by rolling one-step-ahead recursion: with air temperature, DHI, DNI, wind speed at 10 m, azimuth and zenith angle as the meteorological input, the model outputs a single value every 15 minutes and then advances the input window by one step before predicting again.</p>
        <p>Forecasting experiments were then run at three evaluation-window lengths: 24 hours, 72 hours and one week. Three periods were selected: 15 May 2020 for the short term, 22 - 24 February 2020 for the medium term, and 13 - 19 April 2020 for the long term. <bold>Table 3</bold> collects the four metrics obtained at each scale.</p>
        <p><bold>Table 3</bold> shows how the model performs at each scale. For the short term it achieves an MAE of 2.68 MW, an RMSE of 4.64 MW, a MAPE of 20.68% and an R<sup>2</sup> of 0.9899. Clearly the model captures the diurnal cycle of PV output closely.</p>
        <p>Excluding exact zeros does not by itself stabilise MAPE, because the denominator stays small for samples immediately adjacent to sunrise and sunset. In the 72-h window, for instance, only 7 samples satisfy 0 &lt; <italic>y</italic><italic><sub>i</sub></italic> &lt; 1 MW, yet they alone raise MAPE from 76.9% (over <italic>y</italic> ≥ 1 MW) to 381.4% (over <italic>y</italic> &gt; 0). A restricted variant is therefore reported alongside:</p>
        <p><bold>Table 3.</bold>Evaluation metrics of forecasting performance at different time scales.</p>
        <table-wrap id="tbl3">
          <label>Table 3</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <bold>Forecast</bold>
                  <bold>horizon</bold>
                </td>
                <td>
                  <bold>MAE/MW</bold>
                </td>
                <td>
                  <bold>RMSE/MW</bold>
                </td>
                <td>
                  <bold>MAPE/%</bold>
                </td>
                <td>
                  <bold>MAPE</bold>
                  <bold>(≥5</bold>
                  <bold>MW)/%</bold>
                </td>
                <td>
                  <italic>
                    <bold>R</bold>
                  </italic>
                  <bold>
                    <sup>2</sup>
                  </bold>
                </td>
              </tr>
              <tr>
                <td>Short term (24 h)</td>
                <td>2.68</td>
                <td>4.64</td>
                <td>20.68</td>
                <td>14.30</td>
                <td>0.9899</td>
              </tr>
              <tr>
                <td>Medium term (72 h)</td>
                <td>10.70</td>
                <td>15.50</td>
                <td>381.42</td>
                <td>33.87</td>
                <td>0.7652</td>
              </tr>
              <tr>
                <td>Long term (1 week)</td>
                <td>11.68</td>
                <td>18.39</td>
                <td>268.18</td>
                <td>57.26</td>
                <td>0.7744</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <disp-formula id="FD9">
          <label>(9)</label>
          <mml:math display="inline">
            <mml:mrow>
              <mml:mtext>MAPE</mml:mtext>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:mo>≥</mml:mo>
                  <mml:mn>5</mml:mn>
                  <mml:mtext>
                     
                  </mml:mtext>
                  <mml:mtext>MW</mml:mtext>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mn>100</mml:mn>
                </mml:mrow>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>|</mml:mo>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>S</mml:mi>
                        <mml:mn>5</mml:mn>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo>|</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mfrac>
              <mml:munder>
                <mml:mstyle displaystyle="true" mathsize="140%">
                  <mml:mo>∑</mml:mo>
                </mml:mstyle>
                <mml:mrow>
                  <mml:mi>i</mml:mi>
                  <mml:mo>∈</mml:mo>
                  <mml:msub>
                    <mml:mi>S</mml:mi>
                    <mml:mn>5</mml:mn>
                  </mml:msub>
                </mml:mrow>
              </mml:munder>
              <mml:mrow>
                <mml:mo>|</mml:mo>
                <mml:mrow>
                  <mml:mfrac>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>y</mml:mi>
                        <mml:mi>i</mml:mi>
                      </mml:msub>
                      <mml:mo>−</mml:mo>
                      <mml:msub>
                        <mml:mover accent="true">
                          <mml:mi>y</mml:mi>
                          <mml:mo>^</mml:mo>
                        </mml:mover>
                        <mml:mi>i</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>y</mml:mi>
                        <mml:mi>i</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                  </mml:mfrac>
                </mml:mrow>
                <mml:mo>|</mml:mo>
              </mml:mrow>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:msub>
                <mml:mi>S</mml:mi>
                <mml:mn>5</mml:mn>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mrow>
                <mml:mo>{</mml:mo>
                <mml:mrow>
                  <mml:mi>i</mml:mi>
                  <mml:mo>|</mml:mo>
                  <mml:msub>
                    <mml:mi>y</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mo>&gt;</mml:mo>
                  <mml:mn>5</mml:mn>
                  <mml:mtext>
                     
                  </mml:mtext>
                  <mml:mtext>MW</mml:mtext>
                </mml:mrow>
                <mml:mo>}</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>This variant is a diagnostic of accuracy within the operating range; it is not presented as an improvement on MAPE and does not replace it. SO both values are reported for every window.</p>
        <p>Extending the horizon changes the picture. The MAE rises to 10.70 MW at the medium term and 11.68 MW at the long term—roughly 4 times the short-term value. The RMSE grows by a factor of about 3.3, and R<sup>2</sup> falls from 0.9899 to 0.7652 and then 0.7744, a loss of about 0.22.</p>
        <p>The value of MAPE depends heavily on how it is defined, as the three scales make clear. Samples taken at night, when the true power is zero, account for 41.2% - 53.6% of the data; because MAPE divides by the true value, its relative error explodes as that denominator approaches zero. Medium- and long-term MAPE is inflated for exactly this reason.</p>
        <p>Filtering changes the numbers a great deal. Excluding samples below 1 MW cuts the medium-term MAPE to 76.89%. Keeping only samples of at least 5 MW cuts it further, to 33.87% at the medium term and 57.26% at the long term. MAPE (≥5 MW) is therefore reported when PV forecasting accuracy is assessed in this paper. Accuracy does not keep falling as the horizon grows. Medium- and long-term results are worse than the short-term result, yet both settle at a comparable level: an MAE of about 11 MW, an <italic>R</italic><sup>2</sup> of about 0.77 and a MAPE (≥5 MW) of about 45.57%.</p>
        <p>The 5 MW threshold was chosen on three grounds rather than by optimisation: it corresponds to 3.8% of peak output (131.17 MW) and 10.7% of mean daytime output (46.84 MW); it retains 85% - 91% of the non-zero samples across the three windows; and it caps the contribution of a 1 MW error at 20%, so the metric cannot be dominated by near-zero denominators. <bold>Table 4</bold> shows that MAPE falls monotonically with the threshold (72-h window: 381.4% at <italic>y</italic> &gt; 0 to 27.4% at ≥10 MW), confirming that the variation reflects the denominator rather than model behaviour and that no threshold is optimal.</p>
        <p><bold>Table 4</bold><bold>.</bold> MAPE of each time scales under different thresholds.</p>
        <table-wrap id="tbl4">
          <label>Table 4</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <bold>Threshold</bold>
                </td>
                <td>
                  <bold>24-h</bold>
                  <bold>MAPE</bold>
                  <bold>/</bold>
                  <bold>%</bold>
                </td>
                <td>
                  <bold>72-h</bold>
                  <bold>MAPE</bold>
                  <bold>/</bold>
                  <bold>%</bold>
                </td>
                <td>
                  <bold>1-week</bold>
                  <bold>MAPE</bold>
                  <bold>/</bold>
                  <bold>%</bold>
                </td>
              </tr>
              <tr>
                <td>0</td>
                <td>20.68%</td>
                <td>381.42%</td>
                <td>268.18%</td>
              </tr>
              <tr>
                <td>0.5</td>
                <td>20.68%</td>
                <td>82.42%</td>
                <td>153.99%</td>
              </tr>
              <tr>
                <td>1</td>
                <td>19.99%</td>
                <td>76.89%</td>
                <td>110.86%</td>
              </tr>
              <tr>
                <td>2</td>
                <td>18.03%</td>
                <td>46.78%</td>
                <td>88.12%</td>
              </tr>
              <tr>
                <td>3</td>
                <td>18.30%</td>
                <td>45.07%</td>
                <td>66.08%</td>
              </tr>
              <tr>
                <td>5</td>
                <td>14.30%</td>
                <td>33.87%</td>
                <td>57.26%</td>
              </tr>
              <tr>
                <td>7</td>
                <td>11.28%</td>
                <td>30.35%</td>
                <td>49.30%</td>
              </tr>
              <tr>
                <td>10</td>
                <td>11.28%</td>
                <td>27.40%</td>
                <td>37.55%</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>Once the forecast passes a single day, the model reaches a plateau. What limits its accuracy beyond that point is how faithfully the phase of the diurnal cycle can be reproduced, not the length of the forecasting step by itself.</p>
      </sec>
      <sec id="sec5dot3">
        <title>5.3. Comparison of Forecasting Curves</title>
        <p>The forecast and actual power curves are set against one another in <xref ref-type="fig" rid="fig3">Figures 3-5</xref> for the short, medium and long terms respectively. Throughout the figures, the actual power appears as a black solid line and the model forecast as a red solid line.</p>
        <fig id="fig3">
          <label>Figure 3</label>
          <graphic xlink:href="https://html.scirp.org/file/1733697-rId92.jpeg?20261106045231" />
        </fig>
        <p><bold>Figure 3</bold><bold>.</bold>Comparison between forecast and actual power at the short-term (24 h) scale.</p>
        <p>Consider first the short-term panel. Here the forecast tracks the measured curve most closely, and discrepancies of any consequence appear only in the morning and evening portions. The medium- and long-term panels still reproduce the general shape of the signal, but the forecast curve broadens the window between sunrise and sunset noticeably. Power is therefore still predicted during intervals in which actual output has already fallen to zero, and a sustained positive deviation overnight is the result.</p>
        <p>It is evident from the figures that the measured curve is followed most closely by the short-term forecast, discrepancies of any consequence being confined to the morning and evening portions. The general shape of the signal is still reproduced by the medium- and long-term forecasts, but the window between sunrise and sunset is distinctly broadened in the forecast curve, so that power continues to be predicted during intervals in which actual output has already fallen to zero; a sustained positive deviation overnight is the consequence.</p>
        <fig id="fig4">
          <label>Figure 4</label>
          <graphic xlink:href="https://html.scirp.org/file/1733697-rId93.jpeg?20261106045231" />
        </fig>
        <p><bold>Figure 4</bold><bold>.</bold>Comparison between forecast and actual power at the medium-term (72 h) scale.</p>
        <fig id="fig5">
          <label>Figure 5</label>
          <graphic xlink:href="https://html.scirp.org/file/1733697-rId94.jpeg?20261106045231" />
        </fig>
        <p><bold>Figure 5</bold><bold>.</bold>Comparison between forecast and actual power at the long-term (1 week) scale.</p>
      </sec>
      <sec id="sec5dot4">
        <title>5.4. Analysis of Residual Distribution Characteristics</title>
        <p>The forecasting error contains both a systematic and a random part. To separate them, the distribution of the residuals is examined below. Three aspects of that distribution receive attention: its centre, its spread, and its shape; its temporal dependence is considered afterwards. <bold>Table 5</bold> gathers the resulting statistics.</p>
        <p><bold>Table 5</bold><bold>.</bold>Statistics of residual distribution characteristics at different time scales.</p>
        <table-wrap id="tbl5">
          <label>Table 5</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <bold>Statistic</bold>
                </td>
                <td>
                  <bold>Short</bold>
                  <bold>term</bold>
                  <bold>(24</bold>
                  <bold>h)</bold>
                </td>
                <td>
                  <bold>Medium</bold>
                  <bold>term</bold>
                  <bold>(72</bold>
                  <bold>h)</bold>
                </td>
                <td>
                  <bold>Long</bold>
                  <bold>term</bold>
                  <bold>(1</bold>
                  <bold>week)</bold>
                </td>
              </tr>
              <tr>
                <td>Residual mean ME/MW</td>
                <td>+2.10</td>
                <td>−6.88</td>
                <td>−5.59</td>
              </tr>
              <tr>
                <td>Residual standard deviation SD/MW</td>
                <td>4.16</td>
                <td>13.91</td>
                <td>17.53</td>
              </tr>
              <tr>
                <td>Residual range/MW</td>
                <td>−8.66 - +17.52</td>
                <td>−36.71 - +24.11</td>
                <td>−66.81 - +56.30</td>
              </tr>
              <tr>
                <td>Skewness</td>
                <td>+1.3912</td>
                <td>−0.5015</td>
                <td>+0.3140</td>
              </tr>
              <tr>
                <td>Excess kurtosis</td>
                <td>+2.8728</td>
                <td>−0.2681</td>
                <td>+2.2359</td>
              </tr>
              <tr>
                <td>Shapiro-Wilk test p-value</td>
                <td>
                  1.55 × 10
                  <sup>−</sup>
                  <sup>9</sup>
                </td>
                <td>
                  2.11 × 10
                  <sup>−</sup>
                  <sup>12</sup>
                </td>
                <td>
                  1.26 × 10
                  <sup>−</sup>
                  <sup>20</sup>
                </td>
              </tr>
              <tr>
                <td>Points of underestimation/overestimation</td>
                <td>46/22</td>
                <td>71/201</td>
                <td>128/348</td>
              </tr>
              <tr>
                <td>Net deviation as a share of total generation</td>
                <td>+5.17%</td>
                <td>−30.50%</td>
                <td>−18.76%</td>
              </tr>
              <tr>
                <td>Share of points with |residual| ≤ 5 MW</td>
                <td>77.3%</td>
                <td>43.8%</td>
                <td>50.1%</td>
              </tr>
              <tr>
                <td>Share of points with |residual| ≤ 10 MW</td>
                <td>94.8%</td>
                <td>58.3%</td>
                <td>60.0%</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>Take the short-term residual first. Its mean is +2.10 MW, so the model tends to underestimate slightly, and that underestimation is concentrated in a small number of intervals rather than spread evenly. The errors are therefore strongly clustered.</p>
        <p>The medium- and long-term residuals behave in the opposite way. Their means are −6.88 MW and −5.59 MW, and the corresponding net deviations amount to −30.50% and −18.76% of total generation. Across days, then, systematic overestimation dominates the error. Error dispersion widens sharply with the horizon. The residual standard deviation comes to 4.16 MW at the short term, 13.91 MW at the medium term and 17.53 MW at the long term.</p>
        <p>The spread of absolute errors tells a similar story. For 94.8% of the short-term samples the absolute error stays within 10 MW, yet an absolute error within 10 MW holds for only 58.3% of the medium-term samples and 60.0% of the long-term samples. Large errors are accordingly no longer occasional at long horizons; they have become routine.</p>
        <p>Shape and symmetry differ between the scales, as the skewness and kurtosis values reveal. The short-term residual has a skewness of +1.3912 and an excess kurtosis of +2.8728; the long-term residual takes +0.3140 and +2.2359. Both are right-skewed with heavy tails, which means that a few samples underestimate the power by a comparatively large margin while most samples err by very little.</p>
        <p>The medium term behaves differently. Its skewness is −0.5015 and its excess kurtosis −0.2681, so the distribution leans to the left and sits comparatively flat. Moderate overestimation predominates and the errors are rather dispersed.</p>
        <p>Normality cannot be assumed for any of the three scales; the p-value from the Shapiro-Wilk test falls far below 0.05 in every case. This has a practical consequence. Confidence intervals built on the normality assumption are unsuitable for describing the uncertainty of the forecasts, and empirical quantiles are used instead.</p>
        <p>One feature of the dataset deserves emphasis. The “actual power” values used in these experiments correlate strongly and linearly with the diffuse horizontal irradiance (DHI) recorded at the same station.</p>
        <p>The R<sup>2</sup> values of the order of 0.99 reported above therefore chiefly express how well the model reproduces that conversion relation, rather than the accuracy of an independent measurement. The conclusions drawn in this paper about performance decay across scales and about the structure of the residuals nevertheless hold. For engineering dispatching decisions, however, verification against independently measured power data would be advisable.</p>
        <p>Two distinct sample populations are used in this study and are kept separate throughout. The estimation population is the set of records used to fit the models; in the preprocessing stage, records with zero output are removed from it, because they correspond to night-time intervals in which generation is structurally absent and their inclusion would only bias the fit towards the trivial solution. The evaluation population is the complete 15-minute grid of the forecast period, in which night-time zero-output intervals are retained. Retaining them is necessary because the object of the assessment is a continuous 24-hour, 72-hour and one-week power series rather than a daylight-only series, and because the error that matters operationally is defined at every instant, including intervals in which generation is zero. All metrics reported in <bold>Table 3</bold> and <bold>Table 4</bold> are therefore computed on the evaluation population; the removal of zero-output records affects only model fitting and never the denominator of any reported metric.</p>
      </sec>
    </sec>
    <sec id="sec6">
      <title>6. Conclusions</title>
      <p>The performance of the RNN-LSTM-XGBoost PV power forecasting method has been investigated experimentally and systematically at three time scales—24 hours (short term), 72 hours (medium term) and 1 week (long term). The principal findings are set out below.</p>
      <p>1) Forecasting accuracy declines sharply as the forecasting step grows longer, and a plateau effect is present. An MAE of 2.68 MW, an RMSE of 4.64 MW and an R<sup>2</sup> of 0.9899 are obtained for the short term, whereas the medium and long terms raise the MAE to 10.70 MW and 11.68 MW and lower R<sup>2</sup> to 0.7652 and 0.7744. The latter two figures are essentially equal, so the model may be said to reach a plateau in accuracy once the horizon passes one day, beyond which lengthening the step further brings no substantial deterioration.</p>
      <p>2) MAPE is sensitive in PV power forecasting to the way it is defined. Night-time samples of zero power occupy a considerable share of the data, and MAPE is inflated as a result: the apparent medium-term value reaches 381.42%, falling to 33.87% once only samples whose true value is at least 5 MW are counted. MAPE (≥5 MW) is accordingly recommended for evaluation.</p>
      <p>3) The residual distribution is plainly non-normal and displays strong autocorrelation, and its systematic component grows with the forecasting step. The hypothesis of normality is rejected at all three scales. The mean residual moves from +2.10 MW in the short term (net deviation +5.17%, underestimation predominating) to −6.88 MW in the medium term and −5.59 MW in the long term (net deviations of −30.50% and −18.76%, overestimation predominating).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <title>References</title>
      <ref id="B1">
        <label>1.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">IEA (2024) Renewables 2024: Analysis and Forecast to 2030. International Energy Agency. https://www.iea.org/reports/renewables-2024</mixed-citation>
          <element-citation publication-type="web">
            <year>2024</year>
            <article-title>Renewables 2024: Analysis and Forecast to 2030</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B2">
        <label>2.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Sadeghi, D., Golshanfard, A., Eslami, S., Rahbar, K. and Kari, R. (2023) Improving PV Power Plant Forecast Accuracy: A Hybrid Deep Learning Approach Compared across Short, Medium, and Long-Term Horizons. <italic>Renewable Energy Focus</italic>, 45, 242-258. https://doi.org/10.1016/j.ref.2023.04.010 <pub-id pub-id-type="doi">10.1016/j.ref.2023.04.010</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.ref.2023.04.010">https://doi.org/10.1016/j.ref.2023.04.010</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Sadeghi, D.</string-name>
              <string-name>Golshanfard, A.</string-name>
              <string-name>Eslami, S.</string-name>
              <string-name>Rahbar, K.</string-name>
              <string-name>Kari, R.</string-name>
              <string-name>Short, M</string-name>
            </person-group>
            <year>2023</year>
            <article-title>Improving PV Power Plant Forecast Accuracy: A Hybrid Deep Learning Approach Compared across Short, Medium, and Long-Term Horizons</article-title>
            <source>Renewable Energy Focus</source>
            <volume>45</volume>
            <pub-id pub-id-type="doi">10.1016/j.ref.2023.04.010</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B3">
        <label>3.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Akhter, M.N., Mekhilef, S., Mokhlis, H., Almohaimeed, Z.M., Muhammad, M.A., Khairuddin, A.S.M., <italic>et al</italic>. (2022) An Hour-Ahead PV Power Forecasting Method Based on an RNN-LSTM Model for Three Different PV Plants. <italic>Energies</italic>, 15, Article 2243. https://doi.org/10.3390/en15062243 <pub-id pub-id-type="doi">10.3390/en15062243</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3390/en15062243">https://doi.org/10.3390/en15062243</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Akhter, M.N.</string-name>
              <string-name>Mekhilef, S.</string-name>
              <string-name>Mokhlis, H.</string-name>
              <string-name>Almohaimeed, Z.M.</string-name>
              <string-name>Muhammad, M.A.</string-name>
              <string-name>Khairuddin, A.S.M.</string-name>
            </person-group>
            <year>2022</year>
            <article-title>An Hour-Ahead PV Power Forecasting Method Based on an RNN-LSTM Model for Three Different PV Plants</article-title>
            <source>Energies</source>
            <volume>15</volume>
            <elocation-id>2243</elocation-id>
            <pub-id pub-id-type="doi">10.3390/en15062243</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B4">
        <label>4.</label>
        <citation-alternatives>
          <mixed-citation publication-type="journal">Armeanu, D.S., Joldes, C.C., Gherghina, S.C. and Andrei, J.V. (2021) Understanding the Multidimensional Linkages among Renewable Energy, Pollution, Economic Growth and Urbanization in Contemporary Economies: Quantitative Assessments across Different Income Countries’ Groups. <italic>Renewable and Sustainable Energy Reviews</italic>, 142, Article ID: 110818. https://doi.org/10.1016/j.rser.2021.110818 <pub-id pub-id-type="doi">10.1016/j.rser.2021.110818</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.rser.2021.110818">https://doi.org/10.1016/j.rser.2021.110818</ext-link></mixed-citation>
          <element-citation publication-type="journal">
            <person-group person-group-type="author">
              <string-name>Armeanu, D.S.</string-name>
              <string-name>Joldes, C.C.</string-name>
              <string-name>Gherghina, S.C.</string-name>
              <string-name>Andrei, J.V.</string-name>
              <string-name>Energy, P</string-name>
            </person-group>
            <year>2021</year>
            <article-title>Understanding the Multidimensional Linkages among Renewable Energy, Pollution, Economic Growth and Urbanization in Contemporary Economies: Quantitative Assessments across Different Income Countries’ Groups</article-title>
            <source>Renewable and Sustainable Energy Reviews</source>
            <volume>142</volume>
            <fpage>110818</fpage>
            <elocation-id>ID</elocation-id>
            <pub-id pub-id-type="doi">10.1016/j.rser.2021.110818</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B5">
        <label>5.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Chahboun, S. and Maaroufi, M. (2021) Principal Component Analysis and Machine Learning Approaches for Photovoltaic Power Prediction: A Comparative Study. <italic>Applied Sciences</italic>, 11, Article 7943. https://doi.org/10.3390/app11177943 <pub-id pub-id-type="doi">10.3390/app11177943</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3390/app11177943">https://doi.org/10.3390/app11177943</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Chahboun, S.</string-name>
              <string-name>Maaroufi, M.</string-name>
            </person-group>
            <year>2021</year>
            <article-title>Principal Component Analysis and Machine Learning Approaches for Photovoltaic Power Prediction: A Comparative Study</article-title>
            <source>Applied Sciences</source>
            <volume>11</volume>
            <elocation-id>7943</elocation-id>
            <pub-id pub-id-type="doi">10.3390/app11177943</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B6">
        <label>6.</label>
        <citation-alternatives>
          <mixed-citation publication-type="journal">de Oliveira Santos, L., AlSkaif, T. and Carvalho, P.C.M. (2026) Hybrid Photovoltaic Power Forecasting by Combining Physical and Machine Learning Models. <italic>Solar Energy</italic>, 317, Article ID: 114951. https://doi.org/10.1016/j.solener.2026.114951 <pub-id pub-id-type="doi">10.1016/j.solener.2026.114951</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.solener.2026.114951">https://doi.org/10.1016/j.solener.2026.114951</ext-link></mixed-citation>
          <element-citation publication-type="journal">
            <person-group person-group-type="author">
              <string-name>Santos, L.</string-name>
              <string-name>AlSkaif, T.</string-name>
              <string-name>Carvalho, P.C.M.</string-name>
            </person-group>
            <year>2026</year>
            <article-title>Hybrid Photovoltaic Power Forecasting by Combining Physical and Machine Learning Models</article-title>
            <source>Solar Energy</source>
            <volume>317</volume>
            <fpage>114951</fpage>
            <elocation-id>ID</elocation-id>
            <pub-id pub-id-type="doi">10.1016/j.solener.2026.114951</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B7">
        <label>7.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Ren, Y., Suganthan, P.N. and Srikanth, N. (2015) Ensemble Methods for Wind and Solar Power Forecasting—A State-of-the-Art Review. <italic>Renewable and Sustainable Energy Reviews</italic>, 50, 82-91. https://doi.org/10.1016/j.rser.2015.04.081 <pub-id pub-id-type="doi">10.1016/j.rser.2015.04.081</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.rser.2015.04.081">https://doi.org/10.1016/j.rser.2015.04.081</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Ren, Y.</string-name>
              <string-name>Suganthan, P.N.</string-name>
              <string-name>Srikanth, N.</string-name>
            </person-group>
            <year>2015</year>
            <article-title>Ensemble Methods for Wind and Solar Power Forecasting—A State-of-the-Art Review</article-title>
            <source>Renewable and Sustainable Energy Reviews</source>
            <volume>50</volume>
            <pub-id pub-id-type="doi">10.1016/j.rser.2015.04.081</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B8">
        <label>8.</label>
        <citation-alternatives>
          <mixed-citation publication-type="confproc">Zhao, T. and Huang, L. (2025). A Short-Term Photovoltaic Power Forecasting Method Based on Meteorological Data Using GRF-LSTM-XGBoost Model. 2025 7 <italic>th Asia Energy and Electrical Engineering Symposium</italic> ( <italic>AEEES</italic>), Chengdu, 28-31 March 2025, 1068-1073. https://doi.org/10.1109/aeees64634.2025.11019969 <pub-id pub-id-type="doi">10.1109/aeees64634.2025.11019969</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1109/aeees64634.2025.11019969">https://doi.org/10.1109/aeees64634.2025.11019969</ext-link></mixed-citation>
          <element-citation publication-type="confproc">
            <person-group person-group-type="author">
              <string-name>Zhao, T.</string-name>
              <string-name>Huang, L.</string-name>
            </person-group>
            <year>2025</year>
            <pub-id pub-id-type="doi">10.1109/aeees64634.2025.11019969</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B9">
        <label>9.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Hossain, M.S. and Mahmood, H. (2020) Short-Term Photovoltaic Power Forecasting Using an LSTM Neural Network and Synthetic Weather Forecast. <italic>IEEE Access</italic>, 8, 172524-172533. https://doi.org/10.1109/access.2020.3024901 <pub-id pub-id-type="doi">10.1109/access.2020.3024901</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1109/access.2020.3024901">https://doi.org/10.1109/access.2020.3024901</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Hossain, M.S.</string-name>
              <string-name>Mahmood, H.</string-name>
            </person-group>
            <year>2020</year>
            <article-title>Short-Term Photovoltaic Power Forecasting Using an LSTM Neural Network and Synthetic Weather Forecast</article-title>
            <source>IEEE Access</source>
            <volume>8</volume>
            <pub-id pub-id-type="doi">10.1109/access.2020.3024901</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B10">
        <label>10.</label>
        <citation-alternatives>
          <mixed-citation publication-type="journal">Wang, K., Qi, X. and Liu, H. (2019) Photovoltaic Power Forecasting Based Lstm-Convolutional Network. <italic>Energy</italic>, 189, Article ID: 116225. https://doi.org/10.1016/j.energy.2019.116225 <pub-id pub-id-type="doi">10.1016/j.energy.2019.116225</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.energy.2019.116225">https://doi.org/10.1016/j.energy.2019.116225</ext-link></mixed-citation>
          <element-citation publication-type="journal">
            <person-group person-group-type="author">
              <string-name>Wang, K.</string-name>
              <string-name>Qi, X.</string-name>
              <string-name>Liu, H.</string-name>
            </person-group>
            <year>2019</year>
            <article-title>Photovoltaic Power Forecasting Based Lstm-Convolutional Network</article-title>
            <source>Energy</source>
            <volume>189</volume>
            <fpage>116225</fpage>
            <elocation-id>ID</elocation-id>
            <pub-id pub-id-type="doi">10.1016/j.energy.2019.116225</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B11">
        <label>11.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Antonanzas, J., Osorio, N., Escobar, R., Urraca, R., Martinez-de-Pison, F.J. and Antonanzas-Torres, F. (2016) Review of Photovoltaic Power Forecasting. <italic>So</italic><italic>lar Energy</italic>, 136, 78-111. https://doi.org/10.1016/j.solener.2016.06.069 <pub-id pub-id-type="doi">10.1016/j.solener.2016.06.069</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.solener.2016.06.069">https://doi.org/10.1016/j.solener.2016.06.069</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Antonanzas, J.</string-name>
              <string-name>Osorio, N.</string-name>
              <string-name>Escobar, R.</string-name>
              <string-name>Urraca, R.</string-name>
              <string-name>Martinez-de-Pison, F.J.</string-name>
              <string-name>Antonanzas-Torres, F.</string-name>
            </person-group>
            <year>2016</year>
            <article-title>Review of Photovoltaic Power Forecasting</article-title>
            <source>Solar Energy</source>
            <volume>136</volume>
            <pub-id pub-id-type="doi">10.1016/j.solener.2016.06.069</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B12">
        <label>12.</label>
        <citation-alternatives>
          <mixed-citation publication-type="journal">Markovics, D. and Mayer, M.J. (2022) Comparison of Machine Learning Methods for Photovoltaic Power Forecasting Based on Numerical Weather Prediction. <italic>Renewable and Sustainable Energy Reviews</italic>, 161, Article ID: 112364. https://doi.org/10.1016/j.rser.2022.112364 <pub-id pub-id-type="doi">10.1016/j.rser.2022.112364</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.rser.2022.112364">https://doi.org/10.1016/j.rser.2022.112364</ext-link></mixed-citation>
          <element-citation publication-type="journal">
            <person-group person-group-type="author">
              <string-name>Markovics, D.</string-name>
              <string-name>Mayer, M.J.</string-name>
            </person-group>
            <year>2022</year>
            <article-title>Comparison of Machine Learning Methods for Photovoltaic Power Forecasting Based on Numerical Weather Prediction</article-title>
            <source>Renewable and Sustainable Energy Reviews</source>
            <volume>161</volume>
            <fpage>112364</fpage>
            <elocation-id>ID</elocation-id>
            <pub-id pub-id-type="doi">10.1016/j.rser.2022.112364</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B13">
        <label>13.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Zamani Joharestani, M., Cao, C., Ni, X., Bashir, B. and Talebiesfandarani, S. (2019) PM <sub>2.5</sub> Prediction Based on Random Forest, XGBoost, and Deep Learning Using Multisource Remote Sensing Data. <italic>Atmosphere</italic>, 10, Article 373. https://doi.org/10.3390/atmos10070373 <pub-id pub-id-type="doi">10.3390/atmos10070373</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3390/atmos10070373">https://doi.org/10.3390/atmos10070373</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Joharestani, M.</string-name>
              <string-name>Cao, C.</string-name>
              <string-name>Ni, X.</string-name>
              <string-name>Bashir, B.</string-name>
              <string-name>Talebiesfandarani, S.</string-name>
              <string-name>Forest, X</string-name>
            </person-group>
            <year>2019</year>
            <article-title>PM2</article-title>
            <source>5 Prediction Based on Random Forest</source>
            <volume>10</volume>
            <elocation-id>373</elocation-id>
            <pub-id pub-id-type="doi">10.3390/atmos10070373</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B14">
        <label>14.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Wang, J., Zhang, Z., Xu, W., Li, Y. and Niu, G. (2025) Short-Term Photovoltaic Power Forecasting Using a BI-LSTM Neural Network Optimized by Hybrid Algorithms. <italic>Sustainability</italic>, 17, Article 5277. https://doi.org/10.3390/su17125277 <pub-id pub-id-type="doi">10.3390/su17125277</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3390/su17125277">https://doi.org/10.3390/su17125277</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Wang, J.</string-name>
              <string-name>Zhang, Z.</string-name>
              <string-name>Xu, W.</string-name>
              <string-name>Li, Y.</string-name>
              <string-name>Niu, G.</string-name>
            </person-group>
            <year>2025</year>
            <article-title>Short-Term Photovoltaic Power Forecasting Using a BI-LSTM Neural Network Optimized by Hybrid Algorithms</article-title>
            <source>Sustainability</source>
            <volume>17</volume>
            <elocation-id>5277</elocation-id>
            <pub-id pub-id-type="doi">10.3390/su17125277</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B15">
        <label>15.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Sur, E. (2026) A Hybrid 1D-CNN-LSTM-MHA Model for Short-Term Probabilistic Photovoltaic Power Forecasting. <italic>Solar</italic>, 6, Article 30. https://doi.org/10.3390/solar6030030 <pub-id pub-id-type="doi">10.3390/solar6030030</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3390/solar6030030">https://doi.org/10.3390/solar6030030</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Sur, E.</string-name>
            </person-group>
            <year>2026</year>
            <article-title>A Hybrid 1D-CNN-LSTM-MHA Model for Short-Term Probabilistic Photovoltaic Power Forecasting</article-title>
            <source>Solar</source>
            <volume>6</volume>
            <elocation-id>30</elocation-id>
            <pub-id pub-id-type="doi">10.3390/solar6030030</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B16">
        <label>16.</label>
        <citation-alternatives>
          <mixed-citation publication-type="confproc">Qiu, Y., Liu, Y. and Zheng, X. (2024) Research on Solar Photovoltaic Panel Power Generation Prediction and Comparative Analysis Based on Multiple Machine Learning Algorithms. 2024 3 <italic>rd International Conference on Energy</italic>, <italic>Power and Electrical Technology</italic>( <italic>ICEPET</italic>), Chengdu, 17-19 May 2024, 83-86. https://doi.org/10.1109/icepet61938.2024.10625860 <pub-id pub-id-type="doi">10.1109/icepet61938.2024.10625860</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1109/icepet61938.2024.10625860">https://doi.org/10.1109/icepet61938.2024.10625860</ext-link></mixed-citation>
          <element-citation publication-type="confproc">
            <person-group person-group-type="author">
              <string-name>Qiu, Y.</string-name>
              <string-name>Liu, Y.</string-name>
              <string-name>Zheng, X.</string-name>
              <string-name>Energy, P</string-name>
            </person-group>
            <year>2024</year>
            <article-title>Research on Solar Photovoltaic Panel Power Generation Prediction and Comparative Analysis Based on Multiple Machine Learning Algorithms</article-title>
            <source>2024 3rd International Conference on Energy</source>
            <volume>17</volume>
            <pub-id pub-id-type="doi">10.1109/icepet61938.2024.10625860</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B17">
        <label>17.</label>
        <citation-alternatives>
          <mixed-citation publication-type="journal">Bin Yousuf, K., Akter, A., Noor, H.A., Hoque, A. and Ahmed, A. (2026) A Hybrid XGBoost-LSTM Model with Physics-Informed Features and Uncertainty Quantification for Solar Power Forecasting. <italic>Energy Reports</italic>, 15, Article ID: 109068. https://doi.org/10.1016/j.egyr.2026.109068 <pub-id pub-id-type="doi">10.1016/j.egyr.2026.109068</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.egyr.2026.109068">https://doi.org/10.1016/j.egyr.2026.109068</ext-link></mixed-citation>
          <element-citation publication-type="journal">
            <person-group person-group-type="author">
              <string-name>Yousuf, K.</string-name>
              <string-name>Akter, A.</string-name>
              <string-name>Noor, H.A.</string-name>
              <string-name>Hoque, A.</string-name>
              <string-name>Ahmed, A.</string-name>
            </person-group>
            <year>2026</year>
            <article-title>A Hybrid XGBoost-LSTM Model with Physics-Informed Features and Uncertainty Quantification for Solar Power Forecasting</article-title>
            <source>Energy Reports</source>
            <volume>15</volume>
            <fpage>109068</fpage>
            <elocation-id>ID</elocation-id>
            <pub-id pub-id-type="doi">10.1016/j.egyr.2026.109068</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
    </ref-list>
  </back>
</article>