mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
splitting out post ciga figures
This commit is contained in:
parent
c47af474b9
commit
752f0b0f83
1 changed files with 59 additions and 12 deletions
|
|
@ -2548,34 +2548,52 @@ def patch_cleaned(cleaned):
|
|||
return cleaned
|
||||
|
||||
|
||||
def calculate_eco4_post_ciga(eligiblity_counts, input_data, ha_ciga_conversion_rate, eco4_rate):
|
||||
def calculate_eco4_post_ciga(
|
||||
eligiblity_counts, input_data, ha_ciga_conversion_rate, ha_ciga_pass_to_sale_rate, ha_eco4_to_sale_rate,
|
||||
eco4_rate
|
||||
):
|
||||
remaining_needing_ciga_check = eligiblity_counts[
|
||||
eligiblity_counts["ECO Eligibility"] == "eco4 (subject to ciga)"
|
||||
]["count"].sum()
|
||||
|
||||
has_ciga_check = not input_data["ciga_list"].empty
|
||||
if has_ciga_check:
|
||||
eco4_confirmed = eligiblity_counts[
|
||||
eligiblity_counts["ECO Eligibility"].isin(
|
||||
["eco4", "eco4 - passed ciga"]
|
||||
)
|
||||
]["count"].sum()
|
||||
|
||||
eco4_no_ciga_needed = eligiblity_counts[
|
||||
eligiblity_counts["ECO Eligibility"] == "eco4"
|
||||
]["count"].sum()
|
||||
|
||||
eco4_ciga_passed = eligiblity_counts[
|
||||
eligiblity_counts["ECO Eligibility"] == "eco4 - passed ciga"
|
||||
]["count"].sum()
|
||||
|
||||
eco4_confirmed = (eco4_no_ciga_needed * ha_eco4_to_sale_rate) + (eco4_ciga_passed * ha_ciga_pass_to_sale_rate)
|
||||
eco4_confirmed = np.round(eco4_confirmed)
|
||||
|
||||
if remaining_needing_ciga_check > 0:
|
||||
# We update the eco4 post ciga with the converted remaining
|
||||
eco4_remaining_forecast = np.round(remaining_needing_ciga_check * ha_ciga_conversion_rate)
|
||||
eco4_remaining_forecast = np.round(
|
||||
remaining_needing_ciga_check * ha_ciga_conversion_rate * ha_ciga_pass_to_sale_rate
|
||||
)
|
||||
eco4_post_ciga = eco4_confirmed + eco4_remaining_forecast
|
||||
else:
|
||||
eco4_remaining_forecast = 0
|
||||
eco4_post_ciga = eco4_confirmed
|
||||
else:
|
||||
eco4_confirmed = 0
|
||||
eco4_remaining_forecast = np.round(remaining_needing_ciga_check * ha_ciga_conversion_rate)
|
||||
eco4_no_ciga_needed = eligiblity_counts[
|
||||
eligiblity_counts["ECO Eligibility"] == "eco4"
|
||||
]["count"].sum()
|
||||
eco4_confirmed = np.round(eco4_no_ciga_needed * ha_eco4_to_sale_rate)
|
||||
eco4_remaining_forecast = np.round(
|
||||
remaining_needing_ciga_check * ha_ciga_conversion_rate * ha_ciga_pass_to_sale_rate
|
||||
)
|
||||
eco4_post_ciga = (
|
||||
eligiblity_counts[eligiblity_counts["ECO Eligibility"] == "eco4"]["count"].sum() + eco4_remaining_forecast
|
||||
)
|
||||
|
||||
eco4_post_ciga = int(eco4_post_ciga)
|
||||
eco4_remaining_forecast = int(eco4_remaining_forecast)
|
||||
eco4_confirmed = int(eco4_confirmed)
|
||||
|
||||
results = {
|
||||
# Counts
|
||||
|
|
@ -2853,8 +2871,32 @@ def forecast_remaining_sales(loader):
|
|||
median_ciga_success_rate
|
||||
)
|
||||
|
||||
# We also need the ha ciga passed to install success rate
|
||||
ha_ciga_pass_to_sale = converted_ciga_jobs[converted_ciga_jobs["HA Name"] == ha_name]
|
||||
if not ha_ciga_pass_to_sale.empty:
|
||||
ha_ciga_pass_to_sale_rate = (
|
||||
ha_ciga_pass_to_sale["# Ciga dependent successfully installed"].values[0] /
|
||||
ha_ciga_pass_to_sale["# Ciga dependent at installation"].values[0]
|
||||
)
|
||||
else:
|
||||
ha_ciga_pass_to_sale_rate = median_ciga_pass_to_install
|
||||
|
||||
ha_eco4_to_sale = eco4_ciga_independent_passrates[eco4_ciga_independent_passrates["Ha Name"] == ha_name]
|
||||
if not ha_eco4_to_sale.empty:
|
||||
ha_eco4_to_sale_rate = (
|
||||
ha_eco4_to_sale['# ECO4 successfully installed'].values[0] /
|
||||
ha_eco4_to_sale['# ECO4 at install stage'].values[0]
|
||||
)
|
||||
else:
|
||||
ha_eco4_to_sale_rate = median_eco4_to_install
|
||||
|
||||
eco4_post_ciga_total_results = calculate_eco4_post_ciga(
|
||||
eligiblity_counts, input_data, ha_ciga_conversion_rate, eco4_rate
|
||||
eligiblity_counts=eligiblity_counts,
|
||||
input_data=input_data,
|
||||
ha_ciga_conversion_rate=ha_ciga_conversion_rate,
|
||||
ha_ciga_pass_to_sale_rate=ha_ciga_pass_to_sale_rate,
|
||||
ha_eco4_to_sale_rate=ha_eco4_to_sale_rate,
|
||||
eco4_rate=eco4_rate
|
||||
)
|
||||
|
||||
# Calculate the delta compared to Warmfront's original estimate
|
||||
|
|
@ -2863,7 +2905,12 @@ def forecast_remaining_sales(loader):
|
|||
) / original_warmfront_eco4
|
||||
|
||||
eco4_post_ciga_remaining_results = calculate_eco4_post_ciga(
|
||||
eligiblity_counts_remaining, input_data, ha_ciga_conversion_rate, eco4_rate
|
||||
eligiblity_counts=eligiblity_counts_remaining,
|
||||
input_data=input_data,
|
||||
ha_ciga_conversion_rate=ha_ciga_conversion_rate,
|
||||
ha_ciga_pass_to_sale_rate=ha_ciga_pass_to_sale_rate,
|
||||
ha_eco4_to_sale_rate=ha_eco4_to_sale_rate,
|
||||
eco4_rate=eco4_rate
|
||||
)
|
||||
|
||||
to_append = {
|
||||
|
|
@ -2906,7 +2953,7 @@ def forecast_remaining_sales(loader):
|
|||
}
|
||||
|
||||
# Make sure nothing is forgotten due to duplicate multi-index keys
|
||||
if len(to_append) != 18:
|
||||
if len(to_append) != 22:
|
||||
raise ValueError("Something went wrong")
|
||||
|
||||
results.append(to_append)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue