Merge pull request #153 from Hestia-Homes/sap-dev-update-2

Sap dev update 2
This commit is contained in:
KhalimCK 2025-11-04 13:09:33 +00:00 committed by GitHub
commit e78e1bc1cf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 345 additions and 89 deletions

View file

@ -32,6 +32,92 @@ jobs:
# echo "Please choose one of these tags: 'major', 'major', 'patch'" # echo "Please choose one of these tags: 'major', 'major', 'patch'"
# exit(1) # exit(1)
Verify-Lambda:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install packages to retrieve artifacts
env:
AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }}
run: |
pip install --upgrade pip
pip install -r modules/ml-pipeline/src/pipeline/requirements/version_control/requirements.txt
- name: Retrieve artifacts (dvc.lock)
env:
AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }}
run: |
cd modules/ml-pipeline/src/pipeline
dvc pull -r experiments
- name: Set timestamp
id: set_timestamp
run: |
echo "timestamp=$(date +%Y%m%d)" >> $GITHUB_ENV
echo "Generated timestamp: ${timestamp}"
- name: Upload sample row dataset to S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }}
run: |
cd modules/ml-pipeline/src/pipeline/data/prepared_data/
aws s3 cp sample_test.parquet s3://retrofit-data-dev/sap_change_model/sample_data_for_cicd/${timestamp}/sample_test.parquet
- name: Build Lambda docker Image
run: |
docker build . --file ./deployment/Dockerfile.prediction.lambda --tag lambda_test
- name: Run lambda docker container
env:
AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }}
run: |
docker run -d -p 9000:8080 \
-e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
-e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \
-e RUNTIME_ENVIRONMENT=dev \
-e PREDICTIONS_BUCKET=retrofit-sap-predictions-dev lambda_test
- name: Test Lambda endpoint
run: |
sleep 2
curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \
-H "Content-Type: application/json" \
-d "{\"body\": \"{\\\"file_location\\\": \\\"s3://retrofit-data-dev/sap_change_model/sample_data_for_cicd/${timestamp}/sample_test.parquet\\\", \\\"property_id\\\": 1, \\\"portfolio_id\\\": 4, \\\"created_at\\\": \\\"now\\\", \\\"warm\\\": true}\"}"
- name: Get Lambda logs
run: |
docker logs $(docker ps -al -q)
- name: Test Lambda endpoint again
run: |
sleep 2
curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \
-H "Content-Type: application/json" \
-d "{\"body\": \"{\\\"file_location\\\": \\\"s3://retrofit-data-dev/sap_change_model/sample_data_for_cicd/${timestamp}/sample_test.parquet\\\", \\\"property_id\\\": 1, \\\"portfolio_id\\\": 4, \\\"created_at\\\": \\\"now\\\", \\\"testing\\\": true}\"}"
- name: Get Lambda logs
run: |
docker logs $(docker ps -al -q)
- name: Stop Lambda container
run: |
docker stop lambda_test || echo "Container already stopped"
- name: Remove uploaded sample row dataset from S3
if: always()
env:
AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }}
run: |
aws s3 rm --recursive s3://retrofit-data-dev/sap_change_model/sample_data_for_cicd/${timestamp}/
Verify-Model: Verify-Model:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View file

@ -83,3 +83,13 @@ curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d
``` ```
This will send a POST request to the running Lambda function and pass in the required data as JSON. This will send a POST request to the running Lambda function and pass in the required data as JSON.
For the testing of warm or testing of the lambda, use:
```json
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"body": "{\"file_location\": \"s3://retrofit-data-dev/sap_change_model/one_sample_test_dataset.parquet\", \"property_id\": 1, \"portfolio_id\": 4, \"created_at\": \"now\", \"testing\": \"true\"}"}'
```
or
```json
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"body": "{\"file_location\": \"s3://retrofit-data-dev/sap_change_model/one_sample_test_dataset.parquet\", \"property_id\": 1, \"portfolio_id\": 4, \"created_at\": \"now\", \"warm\": \"true\"}"}'
```

View file

@ -1,15 +1,16 @@
FROM public.ecr.aws/lambda/python:3.10 FROM public.ecr.aws/lambda/python:3.12
# Set the working directory # Set the working directory
WORKDIR ${LAMBDA_TASK_ROOT} WORKDIR ${LAMBDA_TASK_ROOT}
ENV PYTHONPATH "${PYTHONPATH}:${LAMBDA_TASK_ROOT}" ENV PYTHONPATH="${PYTHONPATH}:${LAMBDA_TASK_ROOT}"
ENV MPLCONFIGDIR="${LAMBDA_TASK_ROOT}/tmp/matplotlib"
# Environment variables # Environment variables
ARG RUNTIME_ENVIRONMENT ARG RUNTIME_ENVIRONMENT
ENV RUNTIME_ENVIRONMENT=${RUNTIME_ENVIRONMENT} ENV RUNTIME_ENVIRONMENT=${RUNTIME_ENVIRONMENT}
# Install necessary build tools - required to test locally # Install necessary build tools - required to test locally
RUN yum install -y gcc python3-devel gcc-c++ RUN dnf install -y gcc python3-devel gcc-c++
# Install python packages # Install python packages
COPY modules/ml-pipeline/src/pipeline/requirements/predictions/requirements.txt ./requirements.txt COPY modules/ml-pipeline/src/pipeline/requirements/predictions/requirements.txt ./requirements.txt

View file

@ -47,6 +47,23 @@ def upload_dataframe_to_s3(df, bucket, s3_file_name):
return False return False
def warming_up_invocation(model_filepath: str):
"""
Function to handle warm up invocations
"""
import pandas as pd
model = model_factory(settings.build_model["model_type"])
model_filepath = settings.build_model["model_save_filepath"]
model.load_model(model_filepath)
warmup_df = pd.DataFrame(columns=model.model.original_features)
warmup_df = pd.concat([warmup_df.T, pd.DataFrame([0] * len(warmup_df.T))], axis=1).T
warmup_df.fillna(0, inplace=True)
model.predict(data=warmup_df)
def handler(event, context): def handler(event, context):
""" """
Take in event and trigger the prediction pipeline Take in event and trigger the prediction pipeline
@ -66,9 +83,6 @@ def handler(event, context):
created_at = body["created_at"] created_at = body["created_at"]
# TODO: Implement the loading of the model and prediction # TODO: Implement the loading of the model and prediction
storage_filepath = f"s3://{PREDICTIONS_BUCKET}/{portfolio_id}/{property_id}/{created_at}.parquet"
logger.info(f"--- Initiate MLModel ---") logger.info(f"--- Initiate MLModel ---")
build_model_params = settings.build_model build_model_params = settings.build_model
@ -78,6 +92,32 @@ def handler(event, context):
model = model_factory(build_model_params["model_type"]) model = model_factory(build_model_params["model_type"])
model_filepath = build_model_params["model_save_filepath"]
if "warm" in body:
logger.info("Warm up invocation - synthetic prediction")
warming_up_invocation(model_filepath=model_filepath)
return {
"statusCode": 200,
"body": json.dumps(
{
"message": "Successfully warmed up invocation",
}
),
}
if "testing" in body:
logger.info(
"Testing invocation for CI/CD - save file to same location in S3"
)
storage_filepath = body["file_location"].replace(
".parquet", "_output.parquet"
)
else:
storage_filepath = f"s3://{PREDICTIONS_BUCKET}/{portfolio_id}/{property_id}/{created_at}.parquet"
logger.info(f"--- Initiate Input DataClient ---") logger.info(f"--- Initiate Input DataClient ---")
input_dataclient = dataclient_factory( input_dataclient = dataclient_factory(
dataclient_type="aws-s3", dataclient_type="aws-s3",
@ -95,7 +135,7 @@ def handler(event, context):
output_dataclient=output_dataclient, output_dataclient=output_dataclient,
model=model, model=model,
target=feature_process_params["feature_processor_config"]["target"], target=feature_process_params["feature_processor_config"]["target"],
model_filepath=build_model_params["model_save_filepath"], model_filepath=model_filepath,
test_data_filepath=body["file_location"], test_data_filepath=body["file_location"],
predictions_output_filepath=storage_filepath, predictions_output_filepath=storage_filepath,
predictions_column_name=generate_predictions_params[ predictions_column_name=generate_predictions_params[

View file

@ -1,7 +1,8 @@
export PYENV_ROOT=$(HOME)/.pyenv export PYENV_ROOT=$(HOME)/.pyenv
export PATH := $(PYENV_ROOT)/bin:$(PATH) export PATH := $(PYENV_ROOT)/bin:$(PATH)
PYTHON_VERSION ?= 3.10.12 PYTHON_VERSION ?= 3.12.12
CONDA_ENV=dev_env_pipeline CONDA_ENV=dev_env_pipeline
CONDA_ACTIVATE=source $$(conda info --base)/etc/profile.d/conda.sh ; conda deactivate ; conda activate
.PHONY: init .PHONY: init
init: dev-conda init: dev-conda
@ -12,11 +13,15 @@ dev-conda:
# conda remove --name ${CONDA_ENV} --all -y || echo "No environment created previously" # conda remove --name ${CONDA_ENV} --all -y || echo "No environment created previously"
conda create --name ${CONDA_ENV} python=$(PYTHON_VERSION) -y conda create --name ${CONDA_ENV} python=$(PYTHON_VERSION) -y
conda init bash conda init bash
conda run -v -n ${CONDA_ENV} pip install --upgrade pip ${CONDA_ACTIVATE} ${CONDA_ENV} && \
conda run -v -n ${CONDA_ENV} pip install -r src/pipeline/requirements/training/requirements-dev.txt which pip && \
conda run -v -n ${CONDA_ENV} pip install -r src/pipeline/requirements/version_control/requirements.txt pip install --upgrade pip && \
conda run -v -n ${CONDA_ENV} pre-commit install pip install uv && \
conda run -v -n ${CONDA_ENV} pip install ipykernel uv pip install -r src/pipeline/requirements/training/requirements-dev.txt && \
uv pip install -r src/pipeline/requirements/version_control/requirements.txt && \
pre-commit install && \
uv pip install ipykernel && \
conda install llvm-openmp -y
echo "TO ACTIVATE ENVIRONMENT, USE THE FOLLOWING COMMAND" echo "TO ACTIVATE ENVIRONMENT, USE THE FOLLOWING COMMAND"
echo "conda activate ${CONDA_ENV}" echo "conda activate ${CONDA_ENV}"

View file

@ -1,5 +1,5 @@
# Dockerfile that can be used to test loading a model to generate a prediction (part of CI/CD flow) # Dockerfile that can be used to test loading a model to generate a prediction (part of CI/CD flow)
FROM python:3.10.12-slim FROM python:3.12.12-slim
RUN apt-get update && apt-get install -y libgomp1 gcc python3-dev RUN apt-get update && apt-get install -y libgomp1 gcc python3-dev

View file

@ -29,6 +29,7 @@ data_filepath = prepare_data_params["data_filepath"]
train_proportion = prepare_data_params["train_proportion"] train_proportion = prepare_data_params["train_proportion"]
output_train_filepath = prepare_data_params["output_train_filepath"] output_train_filepath = prepare_data_params["output_train_filepath"]
output_test_filepath = prepare_data_params["output_test_filepath"] output_test_filepath = prepare_data_params["output_test_filepath"]
sample_test_filepath = prepare_data_params["sample_test_filepath"]
feature_processor_config = feature_process_params["feature_processor_config"] feature_processor_config = feature_process_params["feature_processor_config"]
logger.info(f"--- Initiate DataClient ---") logger.info(f"--- Initiate DataClient ---")
@ -99,6 +100,10 @@ def prepare_data(
logger.info("--- Outputting data ---") logger.info("--- Outputting data ---")
output_dataclient.save_data(
obj=data.sample(1), location=sample_test_filepath, save_config=None
)
output_dataclient.save_data( output_dataclient.save_data(
obj=train, location=output_train_filepath, save_config=None obj=train, location=output_train_filepath, save_config=None
) )

View file

@ -99,6 +99,12 @@ def generate_scenario_predictions(
] ]
) )
# TEMPORARY FIX: ADD is_post_sap10_starting and is_post_sap10_ending if not present
if "is_post_sap10_starting" not in scenario_data.columns:
scenario_data["is_post_sap10_starting"] = False
if "is_post_sap10_ending" not in scenario_data.columns:
scenario_data["is_post_sap10_ending"] = False
logger.info("--- Loading Model ---") logger.info("--- Loading Model ---")
model.load_model(model_filepath) model.load_model(model_filepath)

View file

@ -14,9 +14,23 @@ default:
output_filepath: ./data/model/allmodels/ output_filepath: ./data/model/allmodels/
problem_type: regression problem_type: regression
eval_metric: mean_squared_error #mean_absolute_error eval_metric: mean_squared_error #mean_absolute_error
time_limit: 1800 time_limit: 3600
presets: medium_quality presets: medium_quality
excluded_model_types: ['RF', 'CAT', 'NN_TORCH', 'KNN', 'XT'] excluded_model_types: ['RF', 'CAT', 'NN_TORCH', 'KNN', 'XT']
infer_limit: 0.05 infer_limit: 1
infer_limit_batch_size: 10000 infer_limit_batch_size: 10000
fit_strategy: "parallel"
ag_args_ensemble: {'num_folds_parallel': 2} ag_args_ensemble: {'num_folds_parallel': 2}
num_gpus: 0
hyperparameters:
{
'NN_TORCH': [{}],
'GBM': [{'extra_trees': True, 'ag_args': {'name_suffix': 'XT'}}, {}, {'learning_rate': 0.03, 'num_leaves': 128, 'feature_fraction': 0.9, 'min_data_in_leaf': 3, 'ag_args': {'name_suffix': 'Large', 'priority': 0,}}],
# 'GBM': [{}],
'CAT': [{}],
'XGB': [{}],
'FASTAI': [{}],
'RF': [{'criterion': 'gini', 'ag_args': {'name_suffix': 'Gini', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'entropy', 'ag_args': {'name_suffix': 'Entr', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'squared_error', 'ag_args': {'name_suffix': 'MSE', 'problem_types': ['regression', 'quantile']}}],
'XT': [{'criterion': 'gini', 'ag_args': {'name_suffix': 'Gini', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'entropy', 'ag_args': {'name_suffix': 'Entr', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'squared_error', 'ag_args': {'name_suffix': 'MSE', 'problem_types': ['regression', 'quantile']}}],
'KNN': [{'weights': 'uniform', 'ag_args': {'name_suffix': 'Unif'}}, {'weights': 'distance', 'ag_args': {'name_suffix': 'Dist'}}],
}

View file

@ -20,10 +20,13 @@ default:
output_dataclient_type: local output_dataclient_type: local
# data_filepath: s3://retrofit-data-dev/sap_change_model/2024-05-28-19-08-25/dataset_rooms.parquet # data_filepath: s3://retrofit-data-dev/sap_change_model/2024-05-28-19-08-25/dataset_rooms.parquet
# data_filepath: s3://retrofit-data-dev/sap_change_model/2024-10-03-22-57-23/dataset_rooms.parquet # data_filepath: s3://retrofit-data-dev/sap_change_model/2024-10-03-22-57-23/dataset_rooms.parquet
data_filepath: s3://retrofit-data-dev/sap_change_model/2024-10-08-21-58-03/dataset_rooms.parquet # data_filepath: s3://retrofit-data-dev/sap_change_model/2024-10-08-21-58-03/dataset_rooms.parquet
# data_filepath: s3://retrofit-data-dev/sap_change_model/2025-09-05-14-05-32/dataset_rooms.parquet
data_filepath: s3://retrofit-data-dev/sap_change_model/2025-11-02-09-32-42/dataset_rooms.parquet
train_proportion: 0.9 train_proportion: 0.9
output_train_filepath: ./data/prepared_data/train.parquet output_train_filepath: ./data/prepared_data/train.parquet
output_test_filepath: ./data/prepared_data/test.parquet output_test_filepath: ./data/prepared_data/test.parquet
sample_test_filepath: ./data/prepared_data/sample_test.parquet
feature_processor: feature_processor:
feature_processor_type: dataframe feature_processor_type: dataframe
@ -38,7 +41,7 @@ default:
'number_habitable_rooms_starting', 'number_habitable_rooms_ending', 'number_heated_rooms_starting', 'number_heated_rooms_ending', 'number_habitable_rooms_starting', 'number_habitable_rooms_ending', 'number_heated_rooms_starting', 'number_heated_rooms_ending',
'number_habitable_rooms', 'number_heated_rooms', 'lighting_cost_starting', 'number_habitable_rooms', 'number_heated_rooms', 'lighting_cost_starting',
'lighting_cost_ending', 'heating_cost_starting', 'heating_cost_ending', 'hot_water_cost_starting', 'hot_water_cost_ending', 'lighting_cost_ending', 'heating_cost_starting', 'heating_cost_ending', 'hot_water_cost_starting', 'hot_water_cost_ending',
'floor_thermal_transmittance', 'floor_thermal_transmittance_ending'] 'floor_thermal_transmittance', 'floor_thermal_transmittance_ending', 'lodgement_date_starting', 'lodgement_date_ending',]
retain_features: null retain_features: null
# retain_features: ['uprn', 'sap_starting', 'hot_water_energy_eff_ending', # retain_features: ['uprn', 'sap_starting', 'hot_water_energy_eff_ending',
# 'mainheat_energy_eff_ending', 'constituency', 'roof_energy_eff_ending', # 'mainheat_energy_eff_ending', 'constituency', 'roof_energy_eff_ending',

View file

@ -1,4 +1,4 @@
"""" """ "
Implementations of MLModels, all of which will have four methods to: Implementations of MLModels, all of which will have four methods to:
- Load model - Load model
- Save Model - Save Model
@ -11,9 +11,6 @@ import joblib
import pandas as pd import pandas as pd
from pathlib import Path from pathlib import Path
from typing import Union, List from typing import Union, List
from sklearn import linear_model
from sklearn.svm import SVR
from autogluon.tabular import TabularDataset, TabularPredictor
from core.interface.InterfaceModels import MLModel from core.interface.InterfaceModels import MLModel
from core.Logger import logger from core.Logger import logger
@ -69,6 +66,8 @@ class SKLearnLinearRegression:
""" """
Method to train a model Method to train a model
""" """
from sklearn import linear_model
self.model = linear_model.LinearRegression() self.model = linear_model.LinearRegression()
x_train = data.iloc[:, data.columns != target] x_train = data.iloc[:, data.columns != target]
@ -117,6 +116,7 @@ class SKLearnSVMRegression:
""" """
Method to train a model Method to train a model
""" """
from sklearn.svm import SVR
validate_dict_keys( validate_dict_keys(
list(model_hyperparameters.keys()), list(model_hyperparameters.keys()),
@ -152,12 +152,17 @@ class AutogluonAutoML:
"infer_limit", "infer_limit",
"infer_limit_batch_size", "infer_limit_batch_size",
"ag_args_ensemble", "ag_args_ensemble",
"fit_strategy",
"num_gpus",
"hyperparameters",
] ]
def load_model(self, path: Union[Path, str]) -> None: def load_model(self, path: Union[Path, str]) -> None:
""" """
Method to load a model Method to load a model
""" """
from autogluon.tabular import TabularPredictor
filepath = str(path) filepath = str(path)
self.model = TabularPredictor.load(path=filepath) self.model = TabularPredictor.load(path=filepath)
@ -183,6 +188,10 @@ class AutogluonAutoML:
""" """
Method to train a model Method to train a model
""" """
from autogluon.tabular import TabularDataset, TabularPredictor
# Force Parallel Model fitting
os.environ["AG_FORCE_PARALLEL"] = "True"
validate_dict_keys( validate_dict_keys(
keys_1=list(model_hyperparameters.keys()), keys_1=list(model_hyperparameters.keys()),
@ -209,6 +218,9 @@ class AutogluonAutoML:
infer_limit=model_hyperparameters["infer_limit"], infer_limit=model_hyperparameters["infer_limit"],
infer_limit_batch_size=model_hyperparameters["infer_limit_batch_size"], infer_limit_batch_size=model_hyperparameters["infer_limit_batch_size"],
ag_args_ensemble=model_hyperparameters["ag_args_ensemble"], ag_args_ensemble=model_hyperparameters["ag_args_ensemble"],
fit_strategy=model_hyperparameters["fit_strategy"],
num_gpus=model_hyperparameters["num_gpus"],
hyperparameters=model_hyperparameters["hyperparameters"].to_dict(),
) )
def predict( def predict(

View file

@ -16,8 +16,8 @@ stages:
deps: deps:
- path: 1_prepare_data.py - path: 1_prepare_data.py
hash: md5 hash: md5
md5: 11a3b8bfdfe199ab7ecc39ccc5652649 md5: a5ce162e1c402c0f811a80ef78cf4dd5
size: 4298 size: 4481
params: params:
configs/settings.yaml: configs/settings.yaml:
default.feature_processor.feature_processor_config.drop_columns: default.feature_processor.feature_processor_config.drop_columns:
@ -42,24 +42,28 @@ stages:
- hot_water_cost_ending - hot_water_cost_ending
- floor_thermal_transmittance - floor_thermal_transmittance
- floor_thermal_transmittance_ending - floor_thermal_transmittance_ending
- lodgement_date_starting
- lodgement_date_ending
default.feature_processor.feature_processor_config.retain_features: default.feature_processor.feature_processor_config.retain_features:
default.feature_processor.feature_processor_config.subsample_amount: default.feature_processor.feature_processor_config.subsample_amount:
default.feature_processor.feature_processor_config.subsample_seed: 0 default.feature_processor.feature_processor_config.subsample_seed: 0
default.feature_processor.feature_processor_config.target: sap_ending default.feature_processor.feature_processor_config.target: sap_ending
default.feature_processor.feature_processor_type: dataframe default.feature_processor.feature_processor_type: dataframe
default.prepare_data.data_filepath: default.prepare_data.data_filepath:
s3://retrofit-data-dev/sap_change_model/2024-10-08-21-58-03/dataset_rooms.parquet s3://retrofit-data-dev/sap_change_model/2025-11-02-09-32-42/dataset_rooms.parquet
default.prepare_data.input_dataclient_type: aws-s3 default.prepare_data.input_dataclient_type: aws-s3
default.prepare_data.output_dataclient_type: local default.prepare_data.output_dataclient_type: local
default.prepare_data.output_test_filepath: ./data/prepared_data/test.parquet default.prepare_data.output_test_filepath:
default.prepare_data.output_train_filepath: ./data/prepared_data/train.parquet ./data/prepared_data/test.parquet
default.prepare_data.output_train_filepath:
./data/prepared_data/train.parquet
default.prepare_data.train_proportion: 0.9 default.prepare_data.train_proportion: 0.9
outs: outs:
- path: data/prepared_data/ - path: data/prepared_data/
hash: md5 hash: md5
md5: 9159a400187e6d65687b5e411a4cb0de.dir md5: 54204b6a31ba369cfbd26b9b25bfa355.dir
size: 48034631 size: 46095230
nfiles: 2 nfiles: 3
build_model: build_model:
cmd: python 2_build_model.py cmd: python 2_build_model.py
deps: deps:
@ -69,9 +73,9 @@ stages:
size: 4820 size: 4820
- path: data/prepared_data - path: data/prepared_data
hash: md5 hash: md5
md5: 9159a400187e6d65687b5e411a4cb0de.dir md5: 54204b6a31ba369cfbd26b9b25bfa355.dir
size: 48034631 size: 46095230
nfiles: 2 nfiles: 3
params: params:
configs/build_model.yaml: configs/build_model.yaml:
default: default:
@ -87,7 +91,7 @@ stages:
output_filepath: ./data/model/allmodels/ output_filepath: ./data/model/allmodels/
problem_type: regression problem_type: regression
eval_metric: mean_squared_error eval_metric: mean_squared_error
time_limit: 1800 time_limit: 3600
presets: medium_quality presets: medium_quality
excluded_model_types: excluded_model_types:
- RF - RF
@ -95,25 +99,93 @@ stages:
- NN_TORCH - NN_TORCH
- KNN - KNN
- XT - XT
infer_limit: 0.05 infer_limit: 1
infer_limit_batch_size: 10000 infer_limit_batch_size: 10000
fit_strategy: parallel
ag_args_ensemble: ag_args_ensemble:
num_folds_parallel: 2 num_folds_parallel: 2
num_gpus: 0
hyperparameters:
NN_TORCH:
- {}
GBM:
- extra_trees: true
ag_args:
name_suffix: XT
- {}
- learning_rate: 0.03
num_leaves: 128
feature_fraction: 0.9
min_data_in_leaf: 3
ag_args:
name_suffix: Large
priority: 0
CAT:
- {}
XGB:
- {}
FASTAI:
- {}
RF:
- criterion: gini
ag_args:
name_suffix: Gini
problem_types:
- binary
- multiclass
- criterion: entropy
ag_args:
name_suffix: Entr
problem_types:
- binary
- multiclass
- criterion: squared_error
ag_args:
name_suffix: MSE
problem_types:
- regression
- quantile
XT:
- criterion: gini
ag_args:
name_suffix: Gini
problem_types:
- binary
- multiclass
- criterion: entropy
ag_args:
name_suffix: Entr
problem_types:
- binary
- multiclass
- criterion: squared_error
ag_args:
name_suffix: MSE
problem_types:
- regression
- quantile
KNN:
- weights: uniform
ag_args:
name_suffix: Unif
- weights: distance
ag_args:
name_suffix: Dist
outs: outs:
- path: data/fit_predictions/ - path: data/fit_predictions/
hash: md5 hash: md5
md5: 6ac50c46e6fd740ccf76da4c2bf6735d.dir md5: f29cfa6a2dadf4fbe81813b3d517fd10.dir
size: 3615441 size: 3474971
nfiles: 1 nfiles: 1
- path: data/model/ - path: data/model/
hash: md5 hash: md5
md5: 2212643103819177f58da1d3063c8c94.dir md5: 1156f526fe9d11134e49f805c41c3781.dir
size: 761489901 size: 763384978
nfiles: 35 nfiles: 35
- path: metrics/fit_metrics.json - path: metrics/fit_metrics.json
hash: md5 hash: md5
md5: d379cf95e07eb7c8797b4b766f8292cf md5: 24b2f7c34e5e08b66f39289afac5d795
size: 225 size: 226
generate_predictions: generate_predictions:
cmd: python 3_generate_predictions.py cmd: python 3_generate_predictions.py
deps: deps:
@ -123,26 +195,28 @@ stages:
size: 2464 size: 2464
- path: data/model - path: data/model
hash: md5 hash: md5
md5: 2212643103819177f58da1d3063c8c94.dir md5: 1156f526fe9d11134e49f805c41c3781.dir
size: 761489901 size: 763384978
nfiles: 35 nfiles: 35
- path: data/prepared_data - path: data/prepared_data
hash: md5 hash: md5
md5: 9159a400187e6d65687b5e411a4cb0de.dir md5: 54204b6a31ba369cfbd26b9b25bfa355.dir
size: 48034631 size: 46095230
nfiles: 2 nfiles: 3
params: params:
configs/settings.yaml: configs/settings.yaml:
default.generate_predictions.input_dataclient_type: local default.generate_predictions.input_dataclient_type: local
default.generate_predictions.output_dataclient_type: local default.generate_predictions.output_dataclient_type: local
default.generate_predictions.predictions_column_name: predictions default.generate_predictions.predictions_column_name: predictions
default.generate_predictions.predictions_output_filepath: ./data/predictions/predictions.parquet default.generate_predictions.predictions_output_filepath:
default.generate_predictions.test_data_filepath: ./data/prepared_data/test.parquet ./data/predictions/predictions.parquet
default.generate_predictions.test_data_filepath:
./data/prepared_data/test.parquet
outs: outs:
- path: data/predictions/ - path: data/predictions/
hash: md5 hash: md5
md5: e8bd8e8ba88a667ccea645890d348e62.dir md5: e9b1d9b94d1e44c999c17b7a2d096db9.dir
size: 507948 size: 484818
nfiles: 1 nfiles: 1
generate_metrics: generate_metrics:
cmd: python 4_generate_metrics.py cmd: python 4_generate_metrics.py
@ -153,14 +227,14 @@ stages:
size: 3484 size: 3484
- path: data/predictions - path: data/predictions
hash: md5 hash: md5
md5: e8bd8e8ba88a667ccea645890d348e62.dir md5: e9b1d9b94d1e44c999c17b7a2d096db9.dir
size: 507948 size: 484818
nfiles: 1 nfiles: 1
- path: data/prepared_data - path: data/prepared_data
hash: md5 hash: md5
md5: 9159a400187e6d65687b5e411a4cb0de.dir md5: 54204b6a31ba369cfbd26b9b25bfa355.dir
size: 48034631 size: 46095230
nfiles: 2 nfiles: 3
params: params:
configs/settings.yaml: configs/settings.yaml:
default.generate_metrics.dataclient_type: local default.generate_metrics.dataclient_type: local
@ -169,15 +243,15 @@ stages:
outs: outs:
- path: metrics/metrics.json - path: metrics/metrics.json
hash: md5 hash: md5
md5: a8cf405272776730f5818d50b20c6f43 md5: 88a4e49229cc3c329faf5bf0fcae3318
size: 222 size: 226
generate_scenerio_metrics: generate_scenerio_metrics:
cmd: python 5_generate_scenarios.py cmd: python 5_generate_scenarios.py
deps: deps:
- path: 5_generate_scenarios.py - path: 5_generate_scenarios.py
hash: md5 hash: md5
md5: 40506749fefd926d47c60ff5b16db307 md5: 872b0c762ce1c8933fcbc5f54d5d4b5d
size: 5337 size: 5658
params: params:
configs/scenarios.yaml: configs/scenarios.yaml:
default.scenarios: default.scenarios:
@ -190,9 +264,9 @@ stages:
outs: outs:
- path: metrics/scenario_metrics.md - path: metrics/scenario_metrics.md
hash: md5 hash: md5
md5: a5d9c42d38ef50e4fdf99a3e6043af2a md5: 3326cc2e59ac1671d99d3e1f27131f54
size: 356 size: 356
- path: metrics/scenario_table.md - path: metrics/scenario_table.md
hash: md5 hash: md5
md5: 3e48c953451af8852572299b66988910 md5: 0a434e055463ec9ade5de2de9bde7154
size: 872 size: 872

View file

@ -1,7 +1,7 @@
joblib==1.3.2 joblib==1.5.2
boto3==1.28.17 boto3==1.40.61
pandas==2.1.4 pandas==2.3.3
autogluon.tabular[all]==1.0.0 autogluon.tabular[all]==1.4.0
dynaconf==3.2.1 dynaconf==3.2.12
pyarrow==13.0.0 pyarrow==20.0.0
pre-commit==3.3.3 pre-commit==4.3.0

View file

@ -1,7 +1,7 @@
joblib==1.3.2 joblib==1.5.2
boto3==1.28.17 boto3==1.40.61
pandas==2.1.4 pandas==2.3.3
autogluon.tabular[all]==1.0.0 autogluon.tabular[all]==1.4.0
dynaconf==3.2.1 dynaconf==3.2.12
pyarrow==13.0.0 pyarrow==20.0.0
PyYAML==6.0.1 PyYAML==6.0.3

View file

@ -1,10 +1,10 @@
joblib==1.3.2 joblib==1.5.2
boto3==1.28.17 boto3==1.40.61
pandas==2.1.4 pandas==2.3.3
autogluon.tabular[all]==1.0.0 autogluon.tabular[all]==1.4.0
ray==2.6.3 ray==2.44.1
dynaconf==3.2.1 dynaconf==3.2.12
alibi==0.9.5 # alibi
shap==0.42.1 shap==0.49.1
pyarrow==13.0.0 pyarrow==20.0.0
pre-commit==3.3.3 pre-commit==4.3.0

View file

@ -1,4 +1,4 @@
boto3==1.28.41 boto3==1.40.61
pandas==2.1.4 pandas==2.3.3
autogluon.tabular[all]==1.0.0 autogluon.tabular[all]==1.4.0
dynaconf==3.2.1 dynaconf==3.2.12