diff --git a/deployment/Dockerfile.prediction.lambda b/deployment/Dockerfile.prediction.lambda index f8000bf..9ee4306 100644 --- a/deployment/Dockerfile.prediction.lambda +++ b/deployment/Dockerfile.prediction.lambda @@ -13,7 +13,11 @@ RUN yum install -y gcc python3-devel gcc-c++ # Install python packages COPY modules/ml-pipeline/src/pipeline/requirements/predictions/requirements.txt ./requirements.txt -RUN pip install --no-cache-dir -r ./requirements.txt + +RUN pip install uv + +RUN uv pip install -r requirements.txt --system +# RUN pip install --no-cache-dir -r ./requirements.txt # Copy the project code COPY modules/ml-pipeline/src/pipeline ./pipeline diff --git a/modules/ml-pipeline/src/Prediction.Dockerfile b/modules/ml-pipeline/src/Prediction.Dockerfile index e0a292c..b5d4e97 100644 --- a/modules/ml-pipeline/src/Prediction.Dockerfile +++ b/modules/ml-pipeline/src/Prediction.Dockerfile @@ -5,8 +5,11 @@ RUN apt-get update && apt-get install -y libgomp1 gcc python3-dev COPY pipeline/requirements/predictions/requirements.txt requirements.txt -RUN pip install --upgrade pip -RUN pip install -r requirements.txt +RUN pip install uv + +RUN uv pip install -r requirements.txt --system + +# RUN pip install -r requirements.txt # Assuming in the CI/CD step, there will be a dvc pull step to get data and model, so will just need to run a single script COPY pipeline/ /home/pipeline/ diff --git a/modules/ml-pipeline/src/pipeline/configs/feature_processor_logic.py b/modules/ml-pipeline/src/pipeline/configs/feature_processor_logic.py index 1094862..6487fed 100644 --- a/modules/ml-pipeline/src/pipeline/configs/feature_processor_logic.py +++ b/modules/ml-pipeline/src/pipeline/configs/feature_processor_logic.py @@ -40,13 +40,34 @@ def remove_unreasonable_habitable_rooms(df): return df -def remove_top_1_percent_heat_demand(df): +def remove_top_1_percent_heat_demand_starting(df): # threshold_value = df.describe(percentiles=[0.99])['HEAT_DEMAND_STARTING']['99%'] threshold_value = 860 df = df[df["heat_demand_starting"] < threshold_value] return df +def remove_negative_heat_demand_starting(df): + # threshold_value = df.describe(percentiles=[0.99])['HEAT_DEMAND_STARTING']['99%'] + threshold_value = 0 + df = df[df["heat_demand_starting"] > threshold_value] + return df + + +# def remove_top_1_percent_heat_demand_ending(df): +# # threshold_value = df.describe(percentiles=[0.99])['HEAT_DEMAND_STARTING']['99%'] +# threshold_value = 593 +# df = df[df["heat_demand_ending"] < threshold_value] +# return df + + +def remove_negative_heat_demand_ending(df): + # threshold_value = df.describe(percentiles=[0.99])['HEAT_DEMAND_STARTING']['99%'] + threshold_value = 0 + df = df[df["heat_demand_ending"] > threshold_value] + return df + + def remove_top_1_percent_carbon(df): # threshold_value = df.describe(percentiles=[0.99])['CARBON_STARTING']['99%'] threshold_value = 18 @@ -66,7 +87,10 @@ business_logic = { "remove_unreasonable_habitable_rooms": remove_unreasonable_habitable_rooms, "keep_negative_heat_change": keep_negative_heat_change, "keep_negative_carbon_change": keep_negative_carbon_change, - "remove_top_1_percent_heat_demand": remove_top_1_percent_heat_demand, + "remove_top_1_percent_heat_demand": remove_top_1_percent_heat_demand_starting, + "remove_negative_heat_demand_starting": remove_negative_heat_demand_starting, + # "remove_top_1_percent_heat_demand_ending": remove_top_1_percent_heat_demand_ending, + "remove_negative_heat_demand_ending": remove_negative_heat_demand_ending, "remove_top_1_percent_carbon": remove_top_1_percent_carbon, # "remove_starting_columns": remove_starting_columns # "keep_ENDING_COLUMNS": keep_ending_columns diff --git a/modules/ml-pipeline/src/pipeline/configs/settings.yaml b/modules/ml-pipeline/src/pipeline/configs/settings.yaml index 75006d7..c25c512 100644 --- a/modules/ml-pipeline/src/pipeline/configs/settings.yaml +++ b/modules/ml-pipeline/src/pipeline/configs/settings.yaml @@ -18,10 +18,8 @@ default: prepare_data: input_dataclient_type: aws-s3 output_dataclient_type: local - # data_filepath: s3://retrofit-data-dev/sap_change_model/2024-03-22-18-56-53/dataset_rooms.parquet - # data_filepath: s3://retrofit-data-dev/sap_change_model/2024-05-25-08-36-36/dataset_rooms.parquet - # data_filepath: s3://retrofit-data-dev/sap_change_model/2024-05-26-10-31-39/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-06-09-10-36-53/dataset_rooms.parquet + data_filepath: s3://retrofit-data-dev/sap_change_model/2024-10-03-22-57-23/dataset_rooms.parquet train_proportion: 0.9 output_train_filepath: ./data/prepared_data/train.parquet output_test_filepath: ./data/prepared_data/test.parquet @@ -36,7 +34,7 @@ default: drop_columns: [ "heat_demand_change", "carbon_change", "rdsap_change", "sap_ending", "carbon_ending", "days_to_starting", "days_to_ending", 'number_habitable_rooms_starting', 'number_habitable_rooms_ending', 'number_heated_rooms_starting', 'number_heated_rooms_ending', - 'number_habitable_rooms', 'number_heated_rooms'] + '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',] # retain_features: ["SAP_STARTING", "TOTAL_FLOOR_AREA_DIFF"] retain_features: null # retain_features: ['uprn', 'sap_starting', 'hot_water_energy_eff_ending', diff --git a/modules/ml-pipeline/src/pipeline/dvc.lock b/modules/ml-pipeline/src/pipeline/dvc.lock index fa9148c..2150976 100644 --- a/modules/ml-pipeline/src/pipeline/dvc.lock +++ b/modules/ml-pipeline/src/pipeline/dvc.lock @@ -34,13 +34,19 @@ stages: - number_heated_rooms_ending - 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 default.feature_processor.feature_processor_config.retain_features: default.feature_processor.feature_processor_config.subsample_amount: default.feature_processor.feature_processor_config.subsample_seed: 0 default.feature_processor.feature_processor_config.target: heat_demand_ending default.feature_processor.feature_processor_type: dataframe default.prepare_data.data_filepath: - s3://retrofit-data-dev/sap_change_model/2024-05-28-19-08-25/dataset_rooms.parquet + s3://retrofit-data-dev/sap_change_model/2024-10-03-22-57-23/dataset_rooms.parquet default.prepare_data.input_dataclient_type: aws-s3 default.prepare_data.output_dataclient_type: local default.prepare_data.output_test_filepath: ./data/prepared_data/test.parquet @@ -49,8 +55,8 @@ stages: outs: - path: data/prepared_data/ hash: md5 - md5: 13cd955d579de20efe743f82bc434c7e.dir - size: 37294025 + md5: ac22171e3434233359d3ee05ae82d098.dir + size: 41096450 nfiles: 2 build_model: cmd: python 2_build_model.py @@ -61,8 +67,8 @@ stages: size: 4820 - path: data/prepared_data hash: md5 - md5: 13cd955d579de20efe743f82bc434c7e.dir - size: 37294025 + md5: ac22171e3434233359d3ee05ae82d098.dir + size: 41096450 nfiles: 2 params: configs/build_model.yaml: @@ -94,18 +100,18 @@ stages: outs: - path: data/fit_predictions/ hash: md5 - md5: b9c9ca64ea6973c409c3a7b8f8ed0c3e.dir - size: 2902493 + md5: 58956584afc6939113016c1d252ec199.dir + size: 3126151 nfiles: 1 - path: data/model/ hash: md5 - md5: a9215bba342ed7ec3f97815dfef94e48.dir - size: 727501601 - nfiles: 36 + md5: 68865aace24ff0aa9241ffcec1f465eb.dir + size: 714713875 + nfiles: 35 - path: metrics/fit_metrics.json hash: md5 - md5: 548a431d58cd4f5a3118235dec734372 - size: 219 + md5: 7eb0b3080018ec5a30e2ddc77c3eab91 + size: 223 generate_predictions: cmd: python 3_generate_predictions.py deps: @@ -115,13 +121,13 @@ stages: size: 2464 - path: data/model hash: md5 - md5: a9215bba342ed7ec3f97815dfef94e48.dir - size: 727501601 - nfiles: 36 + md5: 68865aace24ff0aa9241ffcec1f465eb.dir + size: 714713875 + nfiles: 35 - path: data/prepared_data hash: md5 - md5: 13cd955d579de20efe743f82bc434c7e.dir - size: 37294025 + md5: ac22171e3434233359d3ee05ae82d098.dir + size: 41096450 nfiles: 2 params: configs/settings.yaml: @@ -133,8 +139,8 @@ stages: outs: - path: data/predictions/ hash: md5 - md5: 484781d6b359e458a25e9ab728d6514d.dir - size: 380517 + md5: 28cc6fbd43a3645ed02fc98ce51a809a.dir + size: 426349 nfiles: 1 generate_metrics: cmd: python 4_generate_metrics.py @@ -145,13 +151,13 @@ stages: size: 3447 - path: data/predictions hash: md5 - md5: 484781d6b359e458a25e9ab728d6514d.dir - size: 380517 + md5: 28cc6fbd43a3645ed02fc98ce51a809a.dir + size: 426349 nfiles: 1 - path: data/prepared_data hash: md5 - md5: 13cd955d579de20efe743f82bc434c7e.dir - size: 37294025 + md5: ac22171e3434233359d3ee05ae82d098.dir + size: 41096450 nfiles: 2 params: configs/settings.yaml: @@ -161,8 +167,8 @@ stages: outs: - path: metrics/metrics.json hash: md5 - md5: 4d246765aff7c45079d02b4d8f7527f7 - size: 220 + md5: d80f216a55a99847174a7c44c011fe82 + size: 223 generate_scenerio_metrics: cmd: python 5_generate_scenarios.py deps: