static price reading

This commit is contained in:
2025-11-29 20:13:38 +01:00
parent ad9423bf59
commit d654bbf4b4
6 changed files with 75 additions and 96 deletions

View File

@@ -202,7 +202,7 @@ def predict_prices(**kwargs):
return len(prices_df)
def publish_results(**kwargs):
"""Task: Publish elasticity and pricing results to model registry"""
"""Task: Publish elasticity, pricing model, and predicted prices to registry"""
ti = kwargs['ti']
elasticity_df = pickle.loads(ti.xcom_pull(key='elasticity_results'))
prices_df = pickle.loads(ti.xcom_pull(key='predicted_prices'))
@@ -222,7 +222,6 @@ def publish_results(**kwargs):
registry.publish_elasticity(elasticity_df, model_name='latest', metadata=metadata)
# get fitted pricer from XCom
pricer = pickle.loads(ti.xcom_pull(key='pricer'))
registry.publish_pricing_model(
pricer,
@@ -230,10 +229,13 @@ def publish_results(**kwargs):
metadata={**metadata, 'model_type': type(pricer).__name__}
)
logging.info(f"Published elasticity + pricing for {len(elasticity_df)} products")
registry.publish_prices(prices_df, model_name='latest', metadata=metadata)
logging.info(f"Published elasticity + pricing + prices for {len(elasticity_df)} products")
return {
'n_products': len(elasticity_df),
'n_prices': len(prices_df),
'registry_status': 'success',
'elasticity_mean': float(elasticity_df['elasticity'].mean())
}

View File

@@ -121,6 +121,8 @@ if __name__ == '__main__':
context = PipelineContext(
provider=Provider(backend_url="http://localhost:5000"),
store_mode='hotel',
# 15 min not month
window_size='15min',
)
elasticity_df, prices_df = full_pipeline(context)

View File

@@ -2,6 +2,7 @@ import numpy as np
import pandas as pd
from typing import Optional, List, Dict, Any
from dataclasses import dataclass, field
from experiments.procesing.pricers.simple import StaticPricer
from procesing.steps.base import BaseContextStep
from procesing.pricers import ElasticityBasedPricer
@@ -113,17 +114,17 @@ class BuildStateSpaceStep(BaseContextStep):
class FitPricingFunctionStep(BaseContextStep):
"""
Fit pricing function using elasticity data.
Input: elasticity_df
Fit pricing function using data.
Input: pricing_data
Output: fitted pricing function instance
"""
def transform(self, elasticity_df: pd.DataFrame):
pricing_class = self.context.config.get('pricing_function_class', ElasticityBasedPricer)
def transform(self, pricing_data: pd.DataFrame):
pricing_class = self.context.config.get('pricing_function_class', StaticPricer)
pricing_params = self.context.config.get('pricing_function_params', {})
pricer = pricing_class(**pricing_params)
pricer.fit(elasticity_df)
pricer.fit(pricing_data)
return pricer