openstef 3.4.65__tar.gz → 3.4.66__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 (110) hide show
  1. {openstef-3.4.65 → openstef-3.4.66}/PKG-INFO +1 -1
  2. {openstef-3.4.65 → openstef-3.4.66}/openstef/pipeline/train_model.py +24 -14
  3. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/train_model.py +11 -4
  4. {openstef-3.4.65 → openstef-3.4.66}/openstef.egg-info/PKG-INFO +1 -1
  5. {openstef-3.4.65 → openstef-3.4.66}/setup.py +1 -1
  6. {openstef-3.4.65 → openstef-3.4.66}/LICENSE +0 -0
  7. {openstef-3.4.65 → openstef-3.4.66}/README.md +0 -0
  8. {openstef-3.4.65 → openstef-3.4.66}/openstef/__init__.py +0 -0
  9. {openstef-3.4.65 → openstef-3.4.66}/openstef/__main__.py +0 -0
  10. {openstef-3.4.65 → openstef-3.4.66}/openstef/app_settings.py +0 -0
  11. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/NL_terrestrial_radiation.csv +0 -0
  12. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/NL_terrestrial_radiation.csv.license +0 -0
  13. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_baseline_model.z +0 -0
  14. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_baseline_model.z.license +0 -0
  15. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_model_card.md +0 -0
  16. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/dazls_model_3.4.24/dazls_stored_3.4.24_model_card.md.license +0 -0
  17. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/dutch_holidays.csv +0 -0
  18. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/dutch_holidays.csv.license +0 -0
  19. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/pv_single_coefs.csv +0 -0
  20. {openstef-3.4.65 → openstef-3.4.66}/openstef/data/pv_single_coefs.csv.license +0 -0
  21. {openstef-3.4.65 → openstef-3.4.66}/openstef/data_classes/__init__.py +0 -0
  22. {openstef-3.4.65 → openstef-3.4.66}/openstef/data_classes/data_prep.py +0 -0
  23. {openstef-3.4.65 → openstef-3.4.66}/openstef/data_classes/model_specifications.py +0 -0
  24. {openstef-3.4.65 → openstef-3.4.66}/openstef/data_classes/prediction_job.py +0 -0
  25. {openstef-3.4.65 → openstef-3.4.66}/openstef/data_classes/split_function.py +0 -0
  26. {openstef-3.4.65 → openstef-3.4.66}/openstef/enums.py +0 -0
  27. {openstef-3.4.65 → openstef-3.4.66}/openstef/exceptions.py +0 -0
  28. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/__init__.py +0 -0
  29. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/apply_features.py +0 -0
  30. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/bidding_zone_to_country_mapping.py +0 -0
  31. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/cyclic_features.py +0 -0
  32. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/data_preparation.py +0 -0
  33. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/feature_adder.py +0 -0
  34. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/feature_applicator.py +0 -0
  35. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/general.py +0 -0
  36. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/holiday_features.py +0 -0
  37. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/lag_features.py +0 -0
  38. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/missing_values_transformer.py +0 -0
  39. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/rolling_features.py +0 -0
  40. {openstef-3.4.65 → openstef-3.4.66}/openstef/feature_engineering/weather_features.py +0 -0
  41. {openstef-3.4.65 → openstef-3.4.66}/openstef/metrics/__init__.py +0 -0
  42. {openstef-3.4.65 → openstef-3.4.66}/openstef/metrics/figure.py +0 -0
  43. {openstef-3.4.65 → openstef-3.4.66}/openstef/metrics/metrics.py +0 -0
  44. {openstef-3.4.65 → openstef-3.4.66}/openstef/metrics/reporter.py +0 -0
  45. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/__init__.py +0 -0
  46. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/basecase.py +0 -0
  47. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/confidence_interval_applicator.py +0 -0
  48. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/fallback.py +0 -0
  49. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/metamodels/__init__.py +0 -0
  50. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/metamodels/feature_clipper.py +0 -0
  51. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/metamodels/grouped_regressor.py +0 -0
  52. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/metamodels/missing_values_handler.py +0 -0
  53. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/model_creator.py +0 -0
  54. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/objective.py +0 -0
  55. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/objective_creator.py +0 -0
  56. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/__init__.py +0 -0
  57. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/arima.py +0 -0
  58. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/custom_regressor.py +0 -0
  59. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/dazls.py +0 -0
  60. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/flatliner.py +0 -0
  61. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/gblinear_quantile.py +0 -0
  62. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/lgbm.py +0 -0
  63. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/linear.py +0 -0
  64. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/linear_quantile.py +0 -0
  65. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/regressor.py +0 -0
  66. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/xgb.py +0 -0
  67. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/xgb_multioutput_quantile.py +0 -0
  68. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/regressors/xgb_quantile.py +0 -0
  69. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/serializer.py +0 -0
  70. {openstef-3.4.65 → openstef-3.4.66}/openstef/model/standard_deviation_generator.py +0 -0
  71. {openstef-3.4.65 → openstef-3.4.66}/openstef/model_selection/__init__.py +0 -0
  72. {openstef-3.4.65 → openstef-3.4.66}/openstef/model_selection/model_selection.py +0 -0
  73. {openstef-3.4.65 → openstef-3.4.66}/openstef/monitoring/__init__.py +0 -0
  74. {openstef-3.4.65 → openstef-3.4.66}/openstef/monitoring/performance_meter.py +0 -0
  75. {openstef-3.4.65 → openstef-3.4.66}/openstef/monitoring/teams.py +0 -0
  76. {openstef-3.4.65 → openstef-3.4.66}/openstef/pipeline/__init__.py +0 -0
  77. {openstef-3.4.65 → openstef-3.4.66}/openstef/pipeline/create_basecase_forecast.py +0 -0
  78. {openstef-3.4.65 → openstef-3.4.66}/openstef/pipeline/create_component_forecast.py +0 -0
  79. {openstef-3.4.65 → openstef-3.4.66}/openstef/pipeline/create_forecast.py +0 -0
  80. {openstef-3.4.65 → openstef-3.4.66}/openstef/pipeline/optimize_hyperparameters.py +0 -0
  81. {openstef-3.4.65 → openstef-3.4.66}/openstef/pipeline/train_create_forecast_backtest.py +0 -0
  82. {openstef-3.4.65 → openstef-3.4.66}/openstef/pipeline/utils.py +0 -0
  83. {openstef-3.4.65 → openstef-3.4.66}/openstef/plotting/__init__.py +0 -0
  84. {openstef-3.4.65 → openstef-3.4.66}/openstef/plotting/load_forecast_plotter.py +0 -0
  85. {openstef-3.4.65 → openstef-3.4.66}/openstef/postprocessing/__init__.py +0 -0
  86. {openstef-3.4.65 → openstef-3.4.66}/openstef/postprocessing/postprocessing.py +0 -0
  87. {openstef-3.4.65 → openstef-3.4.66}/openstef/preprocessing/__init__.py +0 -0
  88. {openstef-3.4.65 → openstef-3.4.66}/openstef/preprocessing/preprocessing.py +0 -0
  89. {openstef-3.4.65 → openstef-3.4.66}/openstef/settings.py +0 -0
  90. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/__init__.py +0 -0
  91. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/calculate_kpi.py +0 -0
  92. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/create_basecase_forecast.py +0 -0
  93. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/create_components_forecast.py +0 -0
  94. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/create_forecast.py +0 -0
  95. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/create_solar_forecast.py +0 -0
  96. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/create_wind_forecast.py +0 -0
  97. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/optimize_hyperparameters.py +0 -0
  98. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/split_forecast.py +0 -0
  99. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/utils/__init__.py +0 -0
  100. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/utils/dependencies.py +0 -0
  101. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/utils/predictionjobloop.py +0 -0
  102. {openstef-3.4.65 → openstef-3.4.66}/openstef/tasks/utils/taskcontext.py +0 -0
  103. {openstef-3.4.65 → openstef-3.4.66}/openstef/validation/__init__.py +0 -0
  104. {openstef-3.4.65 → openstef-3.4.66}/openstef/validation/validation.py +0 -0
  105. {openstef-3.4.65 → openstef-3.4.66}/openstef.egg-info/SOURCES.txt +0 -0
  106. {openstef-3.4.65 → openstef-3.4.66}/openstef.egg-info/dependency_links.txt +0 -0
  107. {openstef-3.4.65 → openstef-3.4.66}/openstef.egg-info/requires.txt +0 -0
  108. {openstef-3.4.65 → openstef-3.4.66}/openstef.egg-info/top_level.txt +0 -0
  109. {openstef-3.4.65 → openstef-3.4.66}/pyproject.toml +0 -0
  110. {openstef-3.4.65 → openstef-3.4.66}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: openstef
3
- Version: 3.4.65
3
+ Version: 3.4.66
4
4
  Summary: Open short term energy forecaster
5
5
  Home-page: https://github.com/OpenSTEF/openstef
6
6
  Author: Alliander N.V
@@ -3,7 +3,7 @@
3
3
  # SPDX-License-Identifier: MPL-2.0
4
4
  import logging
5
5
  import os
6
- from typing import Optional, Union, Tuple
6
+ from typing import Optional, Tuple, Union
7
7
 
8
8
  import pandas as pd
9
9
  import structlog
@@ -46,6 +46,7 @@ def train_model_pipeline(
46
46
  check_old_model_age: bool,
47
47
  mlflow_tracking_uri: str,
48
48
  artifact_folder: str,
49
+ ignore_existing_models: bool = False,
49
50
  ) -> Optional[tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]]:
50
51
  """Middle level pipeline that takes care of all persistent storage dependencies.
51
52
 
@@ -79,7 +80,7 @@ def train_model_pipeline(
79
80
 
80
81
  # Get old model and age
81
82
  old_model, model_specs, old_model_age = train_pipeline_step_load_model(
82
- pj, serializer
83
+ pj, serializer, ignore_existing_models
83
84
  )
84
85
 
85
86
  # Check old model age and continue yes/no
@@ -106,6 +107,7 @@ def train_model_pipeline(
106
107
  input_data,
107
108
  old_model,
108
109
  horizons=horizons,
110
+ ignore_existing_models=ignore_existing_models,
109
111
  )
110
112
  except OldModelHigherScoreError as OMHSE:
111
113
  logger.error("Old model is better than new model", pid=pj["id"], exc_info=OMHSE)
@@ -155,6 +157,7 @@ def train_model_pipeline_core(
155
157
  input_data: pd.DataFrame,
156
158
  old_model: OpenstfRegressor = None,
157
159
  horizons: list[float] = DEFAULT_TRAIN_HORIZONS_HOURS,
160
+ ignore_existing_models: bool = False,
158
161
  ) -> Tuple[
159
162
  OpenstfRegressor,
160
163
  Report,
@@ -203,7 +206,7 @@ def train_model_pipeline_core(
203
206
  model_specs.feature_names = list(train_data.columns)
204
207
 
205
208
  # Check if new model is better than old model
206
- if old_model:
209
+ if old_model and not ignore_existing_models:
207
210
  combined = pd.concat([train_data, validation_data])
208
211
  # skip the forecast column added at the end of dataframes
209
212
  if pj.save_train_forecasts:
@@ -220,6 +223,7 @@ def train_model_pipeline_core(
220
223
  # Try to compare new model to old model.
221
224
  # If this does not success, for example since the feature names of the
222
225
  # old model differ from the new model, the new model is considered better
226
+
223
227
  try:
224
228
  score_old_model = old_model.score(x_data, y_data)
225
229
 
@@ -315,25 +319,31 @@ def train_pipeline_common(
315
319
 
316
320
 
317
321
  def train_pipeline_step_load_model(
318
- pj: PredictionJobDataClass, serializer: MLflowSerializer
322
+ pj: PredictionJobDataClass,
323
+ serializer: MLflowSerializer,
324
+ ignore_existing_models: bool = False,
319
325
  ) -> Tuple[OpenstfRegressor, ModelSpecificationDataClass, Union[int, float]]:
320
326
  old_model: Optional[OpenstfRegressor]
321
- try:
322
- old_model, model_specs = serializer.load_model(experiment_name=str(pj.id))
323
- old_model_age = old_model.age # Age attribute is openstef specific
324
- return old_model, model_specs, old_model_age
325
- except (AttributeError, FileNotFoundError, LookupError):
326
- logger.warning("No old model found, training new model", pid=pj.id)
327
- except Exception:
328
- logger.exception("Old model could not be loaded, training new model", pid=pj.id)
327
+
328
+ if not ignore_existing_models:
329
+ try:
330
+ old_model, model_specs = serializer.load_model(experiment_name=str(pj.id))
331
+ old_model_age = old_model.age # Age attribute is openstef specific
332
+ return old_model, model_specs, old_model_age
333
+ except (AttributeError, FileNotFoundError, LookupError):
334
+ logger.warning("No old model found, training new model", pid=pj.id)
335
+ except Exception:
336
+ logger.exception(
337
+ "Old model could not be loaded, training new model", pid=pj.id
338
+ )
339
+
329
340
  old_model = None
330
341
  old_model_age = float("inf")
331
342
  if pj["default_modelspecs"] is not None:
332
343
  model_specs = pj["default_modelspecs"]
333
344
  if model_specs.id != pj.id:
334
345
  raise RuntimeError(
335
- "The id of the prediction job and its default model_specs do not"
336
- " match."
346
+ "The id of the prediction job and its default model_specs do not match."
337
347
  )
338
348
  else:
339
349
  # create basic model_specs
@@ -19,8 +19,10 @@ Example:
19
19
  $ python model_train.py
20
20
 
21
21
  """
22
- from datetime import datetime, timedelta, UTC
22
+
23
+ from datetime import UTC, datetime, timedelta
23
24
  from pathlib import Path
25
+ from typing import Optional
24
26
 
25
27
  import pandas as pd
26
28
 
@@ -41,14 +43,16 @@ from openstef.tasks.utils.taskcontext import TaskContext
41
43
 
42
44
  TRAINING_PERIOD_DAYS: int = 120
43
45
  DEFAULT_CHECK_MODEL_AGE: bool = True
46
+ DEFAULT_IGNORE_EXISTING_MODELS: bool = False
44
47
 
45
48
 
46
49
  def train_model_task(
47
50
  pj: PredictionJobDataClass,
48
51
  context: TaskContext,
49
52
  check_old_model_age: bool = DEFAULT_CHECK_MODEL_AGE,
50
- datetime_start: datetime = None,
51
- datetime_end: datetime = None,
53
+ datetime_start: Optional[datetime] = None,
54
+ datetime_end: Optional[datetime] = None,
55
+ ignore_existing_models: bool = DEFAULT_IGNORE_EXISTING_MODELS,
52
56
  ) -> None:
53
57
  """Train model task.
54
58
 
@@ -104,7 +108,9 @@ def train_model_task(
104
108
  serializer = MLflowSerializer(mlflow_tracking_uri=mlflow_tracking_uri)
105
109
 
106
110
  # Get old model and age
107
- _, _, old_model_age = train_pipeline_step_load_model(pj, serializer)
111
+ _, _, old_model_age = train_pipeline_step_load_model(
112
+ pj, serializer, ignore_existing_models
113
+ )
108
114
 
109
115
  # Check old model age and continue yes/no
110
116
  if (old_model_age < MAXIMUM_MODEL_AGE) and check_old_model_age:
@@ -168,6 +174,7 @@ def train_model_task(
168
174
  check_old_model_age=check_old_model_age,
169
175
  mlflow_tracking_uri=mlflow_tracking_uri,
170
176
  artifact_folder=artifact_folder,
177
+ ignore_existing_models=ignore_existing_models,
171
178
  )
172
179
 
173
180
  if data_sets:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: openstef
3
- Version: 3.4.65
3
+ Version: 3.4.66
4
4
  Summary: Open short term energy forecaster
5
5
  Home-page: https://github.com/OpenSTEF/openstef
6
6
  Author: Alliander N.V
@@ -33,7 +33,7 @@ def read_long_description_from_readme():
33
33
 
34
34
  setup(
35
35
  name="openstef",
36
- version="3.4.65",
36
+ version="3.4.66",
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
File without changes