openstef 3.4.72__tar.gz → 3.4.73__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. {openstef-3.4.72 → openstef-3.4.73}/PKG-INFO +1 -1
  2. {openstef-3.4.72 → openstef-3.4.73}/openstef/data_classes/prediction_job.py +1 -1
  3. {openstef-3.4.72 → openstef-3.4.73}/openstef/enums.py +1 -0
  4. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/model_creator.py +5 -0
  5. openstef-3.4.73/openstef/model/regressors/median.py +78 -0
  6. {openstef-3.4.72 → openstef-3.4.73}/openstef.egg-info/PKG-INFO +1 -1
  7. {openstef-3.4.72 → openstef-3.4.73}/openstef.egg-info/SOURCES.txt +1 -0
  8. {openstef-3.4.72 → openstef-3.4.73}/setup.py +1 -1
  9. {openstef-3.4.72 → openstef-3.4.73}/LICENSE +0 -0
  10. {openstef-3.4.72 → openstef-3.4.73}/README.md +0 -0
  11. {openstef-3.4.72 → openstef-3.4.73}/openstef/__init__.py +0 -0
  12. {openstef-3.4.72 → openstef-3.4.73}/openstef/__main__.py +0 -0
  13. {openstef-3.4.72 → openstef-3.4.73}/openstef/app_settings.py +0 -0
  14. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/NL_terrestrial_radiation.csv +0 -0
  15. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/NL_terrestrial_radiation.csv.license +0 -0
  16. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_baseline_model.z +0 -0
  17. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_baseline_model.z.license +0 -0
  18. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_model_card.md +0 -0
  19. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_model_card.md.license +0 -0
  20. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/dutch_holidays.csv +0 -0
  21. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/dutch_holidays.csv.license +0 -0
  22. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/pv_single_coefs.csv +0 -0
  23. {openstef-3.4.72 → openstef-3.4.73}/openstef/data/pv_single_coefs.csv.license +0 -0
  24. {openstef-3.4.72 → openstef-3.4.73}/openstef/data_classes/__init__.py +0 -0
  25. {openstef-3.4.72 → openstef-3.4.73}/openstef/data_classes/data_prep.py +0 -0
  26. {openstef-3.4.72 → openstef-3.4.73}/openstef/data_classes/model_specifications.py +0 -0
  27. {openstef-3.4.72 → openstef-3.4.73}/openstef/data_classes/split_function.py +0 -0
  28. {openstef-3.4.72 → openstef-3.4.73}/openstef/exceptions.py +0 -0
  29. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/__init__.py +0 -0
  30. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/apply_features.py +0 -0
  31. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/bidding_zone_to_country_mapping.py +0 -0
  32. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/cyclic_features.py +0 -0
  33. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/data_preparation.py +0 -0
  34. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/feature_adder.py +0 -0
  35. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/feature_applicator.py +0 -0
  36. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/general.py +0 -0
  37. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/holiday_features.py +0 -0
  38. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/lag_features.py +0 -0
  39. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/missing_values_transformer.py +0 -0
  40. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/rolling_features.py +0 -0
  41. {openstef-3.4.72 → openstef-3.4.73}/openstef/feature_engineering/weather_features.py +0 -0
  42. {openstef-3.4.72 → openstef-3.4.73}/openstef/logging/__init__.py +0 -0
  43. {openstef-3.4.72 → openstef-3.4.73}/openstef/logging/base_logger.py +0 -0
  44. {openstef-3.4.72 → openstef-3.4.73}/openstef/logging/logger_factory.py +0 -0
  45. {openstef-3.4.72 → openstef-3.4.73}/openstef/logging/logger_types.py +0 -0
  46. {openstef-3.4.72 → openstef-3.4.73}/openstef/logging/standard_logger.py +0 -0
  47. {openstef-3.4.72 → openstef-3.4.73}/openstef/logging/structlog_logger.py +0 -0
  48. {openstef-3.4.72 → openstef-3.4.73}/openstef/metrics/__init__.py +0 -0
  49. {openstef-3.4.72 → openstef-3.4.73}/openstef/metrics/figure.py +0 -0
  50. {openstef-3.4.72 → openstef-3.4.73}/openstef/metrics/metrics.py +0 -0
  51. {openstef-3.4.72 → openstef-3.4.73}/openstef/metrics/reporter.py +0 -0
  52. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/__init__.py +0 -0
  53. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/basecase.py +0 -0
  54. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/confidence_interval_applicator.py +0 -0
  55. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/fallback.py +0 -0
  56. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/metamodels/__init__.py +0 -0
  57. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/metamodels/feature_clipper.py +0 -0
  58. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/metamodels/grouped_regressor.py +0 -0
  59. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/metamodels/missing_values_handler.py +0 -0
  60. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/objective.py +0 -0
  61. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/objective_creator.py +0 -0
  62. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/__init__.py +0 -0
  63. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/arima.py +0 -0
  64. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/custom_regressor.py +0 -0
  65. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/dazls.py +0 -0
  66. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/flatliner.py +0 -0
  67. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/gblinear_quantile.py +0 -0
  68. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/lgbm.py +0 -0
  69. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/linear.py +0 -0
  70. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/linear_quantile.py +0 -0
  71. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/regressor.py +0 -0
  72. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/xgb.py +0 -0
  73. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/xgb_multioutput_quantile.py +0 -0
  74. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/regressors/xgb_quantile.py +0 -0
  75. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/serializer.py +0 -0
  76. {openstef-3.4.72 → openstef-3.4.73}/openstef/model/standard_deviation_generator.py +0 -0
  77. {openstef-3.4.72 → openstef-3.4.73}/openstef/model_selection/__init__.py +0 -0
  78. {openstef-3.4.72 → openstef-3.4.73}/openstef/model_selection/model_selection.py +0 -0
  79. {openstef-3.4.72 → openstef-3.4.73}/openstef/monitoring/__init__.py +0 -0
  80. {openstef-3.4.72 → openstef-3.4.73}/openstef/monitoring/performance_meter.py +0 -0
  81. {openstef-3.4.72 → openstef-3.4.73}/openstef/monitoring/teams.py +0 -0
  82. {openstef-3.4.72 → openstef-3.4.73}/openstef/pipeline/__init__.py +0 -0
  83. {openstef-3.4.72 → openstef-3.4.73}/openstef/pipeline/create_basecase_forecast.py +0 -0
  84. {openstef-3.4.72 → openstef-3.4.73}/openstef/pipeline/create_component_forecast.py +0 -0
  85. {openstef-3.4.72 → openstef-3.4.73}/openstef/pipeline/create_forecast.py +0 -0
  86. {openstef-3.4.72 → openstef-3.4.73}/openstef/pipeline/optimize_hyperparameters.py +0 -0
  87. {openstef-3.4.72 → openstef-3.4.73}/openstef/pipeline/train_create_forecast_backtest.py +0 -0
  88. {openstef-3.4.72 → openstef-3.4.73}/openstef/pipeline/train_model.py +0 -0
  89. {openstef-3.4.72 → openstef-3.4.73}/openstef/pipeline/utils.py +0 -0
  90. {openstef-3.4.72 → openstef-3.4.73}/openstef/plotting/__init__.py +0 -0
  91. {openstef-3.4.72 → openstef-3.4.73}/openstef/plotting/load_forecast_plotter.py +0 -0
  92. {openstef-3.4.72 → openstef-3.4.73}/openstef/postprocessing/__init__.py +0 -0
  93. {openstef-3.4.72 → openstef-3.4.73}/openstef/postprocessing/postprocessing.py +0 -0
  94. {openstef-3.4.72 → openstef-3.4.73}/openstef/preprocessing/__init__.py +0 -0
  95. {openstef-3.4.72 → openstef-3.4.73}/openstef/preprocessing/preprocessing.py +0 -0
  96. {openstef-3.4.72 → openstef-3.4.73}/openstef/settings.py +0 -0
  97. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/__init__.py +0 -0
  98. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/calculate_kpi.py +0 -0
  99. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/create_basecase_forecast.py +0 -0
  100. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/create_components_forecast.py +0 -0
  101. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/create_forecast.py +0 -0
  102. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/create_solar_forecast.py +0 -0
  103. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/create_wind_forecast.py +0 -0
  104. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/optimize_hyperparameters.py +0 -0
  105. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/split_forecast.py +0 -0
  106. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/train_model.py +0 -0
  107. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/utils/__init__.py +0 -0
  108. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/utils/dependencies.py +0 -0
  109. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/utils/predictionjobloop.py +0 -0
  110. {openstef-3.4.72 → openstef-3.4.73}/openstef/tasks/utils/taskcontext.py +0 -0
  111. {openstef-3.4.72 → openstef-3.4.73}/openstef/validation/__init__.py +0 -0
  112. {openstef-3.4.72 → openstef-3.4.73}/openstef/validation/validation.py +0 -0
  113. {openstef-3.4.72 → openstef-3.4.73}/openstef.egg-info/dependency_links.txt +0 -0
  114. {openstef-3.4.72 → openstef-3.4.73}/openstef.egg-info/requires.txt +0 -0
  115. {openstef-3.4.72 → openstef-3.4.73}/openstef.egg-info/top_level.txt +0 -0
  116. {openstef-3.4.72 → openstef-3.4.73}/pyproject.toml +0 -0
  117. {openstef-3.4.72 → openstef-3.4.73}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openstef
3
- Version: 3.4.72
3
+ Version: 3.4.73
4
4
  Summary: Open short term energy forecaster
5
5
  Home-page: https://github.com/OpenSTEF/openstef
6
6
  Author: Alliander N.V
@@ -21,7 +21,7 @@ class PredictionJobDataClass(BaseModel):
21
21
  )
22
22
  model: str = Field(
23
23
  ...,
24
- description="The model type that should be used. Options are: 'xgb', 'xgb_quantile', 'lgb', 'linear', 'linear_quantile', 'gblinear_quantile', 'xgb_multioutput_quantile', 'flatliner'.",
24
+ description="The model type that should be used. Options are: 'xgb', 'xgb_quantile', 'lgb', 'linear', 'linear_quantile', 'gblinear_quantile', 'xgb_multioutput_quantile', 'flatliner', 'median'.",
25
25
  )
26
26
 
27
27
  model_kwargs: Optional[dict] = Field(
@@ -125,6 +125,7 @@ class ModelType(Enum):
125
125
  GBLINEAR_QUANTILE = "gblinear_quantile"
126
126
  ARIMA = "arima"
127
127
  FLATLINER = "flatliner"
128
+ MEDIAN = "median"
128
129
 
129
130
 
130
131
  class ForecastType(Enum):
@@ -17,6 +17,7 @@ from openstef.model.regressors.xgb import XGBOpenstfRegressor
17
17
  from openstef.model.regressors.xgb_multioutput_quantile import (
18
18
  XGBMultiOutputQuantileOpenstfRegressor,
19
19
  )
20
+ from openstef.model.regressors.median import MedianRegressor
20
21
  from openstef.model.regressors.xgb_quantile import XGBQuantileOpenstfRegressor
21
22
 
22
23
  logger = get_logger(__name__)
@@ -138,6 +139,9 @@ valid_model_kwargs = {
138
139
  "seasonal_order",
139
140
  "trend",
140
141
  ],
142
+ ModelType.MEDIAN: [
143
+ # This model does not have any parameters
144
+ ],
141
145
  }
142
146
 
143
147
 
@@ -155,6 +159,7 @@ class ModelCreator:
155
159
  ModelType.GBLINEAR_QUANTILE: GBLinearQuantileOpenstfRegressor,
156
160
  ModelType.ARIMA: ARIMAOpenstfRegressor,
157
161
  ModelType.FLATLINER: FlatlinerRegressor,
162
+ ModelType.MEDIAN: MedianRegressor,
158
163
  }
159
164
 
160
165
  @staticmethod
@@ -0,0 +1,78 @@
1
+ """This module contains the median regressor."""
2
+
3
+ import numpy as np
4
+ import pandas as pd
5
+
6
+ from sklearn.base import RegressorMixin
7
+ from sklearn.utils.validation import check_is_fitted
8
+
9
+ from openstef.model.regressors.regressor import OpenstfRegressor
10
+
11
+
12
+ class MedianRegressor(OpenstfRegressor, RegressorMixin):
13
+ """
14
+ Median regressor implementing the OpenSTEF regressor API.
15
+
16
+ This regressor is good for predicting two types of signals:
17
+ - Signals with very slow dynamics compared to the sampling rate, possibly
18
+ with a lot of noise.
19
+ - Signals that switch between two or more states, which random in nature or
20
+ depend on unknown features, but tend to be stable in each state. An example of
21
+ this may be waste heat delivered from an industrial process. Using a median
22
+ over the last few timesteps adds some hysterisis to avoid triggering on noise.
23
+ """
24
+
25
+ def __init__(self):
26
+ """Initialize MedianRegressor."""
27
+ super().__init__()
28
+
29
+ @property
30
+ def feature_names(self) -> list:
31
+ """Retrieve the model input feature names.
32
+
33
+ Returns:
34
+ The list of feature names
35
+
36
+ """
37
+ check_is_fitted(self, "feature_names_")
38
+ return self.feature_names_
39
+
40
+ @property
41
+ def can_predict_quantiles(self) -> bool:
42
+ return False
43
+
44
+ def predict(self, x: pd.DataFrame, **kwargs) -> np.array:
45
+ """
46
+ Predict the median of the lag features for each time step in the context window.
47
+
48
+ Args:
49
+ x (pd.DataFrame): The input data for prediction. This should be a pandas dataframe with lag features.
50
+
51
+ Returns:
52
+ np.array: The predicted median for each time step in the context window.
53
+ If any lag feature is NaN, this will be ignored.
54
+ If all lag features are NaN, the regressor will return NaN.
55
+ """
56
+
57
+ lag_df = x.loc[:, self.feature_names]
58
+ median = lag_df.median(axis=1, skipna=True)
59
+
60
+ return median
61
+
62
+ def fit(self, x: pd.DataFrame, y: pd.DataFrame, **kwargs) -> RegressorMixin:
63
+ """This model does not have any hyperparameters to fit,
64
+ but it does need to know the feature names of the lag features.
65
+
66
+ Which lag features are used is determined by the feature engineering step.
67
+ """
68
+ self.feature_names_ = list(x.columns[x.columns.str.startswith("T-")])
69
+ if len(self.feature_names_) == 0:
70
+ raise ValueError("No lag features found in the input data.")
71
+
72
+ self.feature_importances_ = np.ones(len(self.feature_names_)) / (
73
+ len(self.feature_names_) or 1.0
74
+ )
75
+ return self
76
+
77
+ def __sklearn_is_fitted__(self) -> bool:
78
+ return True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openstef
3
- Version: 3.4.72
3
+ Version: 3.4.73
4
4
  Summary: Open short term energy forecaster
5
5
  Home-page: https://github.com/OpenSTEF/openstef
6
6
  Author: Alliander N.V
@@ -74,6 +74,7 @@ openstef/model/regressors/gblinear_quantile.py
74
74
  openstef/model/regressors/lgbm.py
75
75
  openstef/model/regressors/linear.py
76
76
  openstef/model/regressors/linear_quantile.py
77
+ openstef/model/regressors/median.py
77
78
  openstef/model/regressors/regressor.py
78
79
  openstef/model/regressors/xgb.py
79
80
  openstef/model/regressors/xgb_multioutput_quantile.py
@@ -33,7 +33,7 @@ def read_long_description_from_readme():
33
33
 
34
34
  setup(
35
35
  name="openstef",
36
- version="3.4.72",
36
+ version="3.4.73",
37
37
  packages=find_packages(include=["openstef", "openstef.*"]),
38
38
  description="Open short term energy forecaster",
39
39
  long_description=read_long_description_from_readme(),
File without changes
File without changes
File without changes
File without changes