2022-01-29 06:41:40 +01:00
|
|
|
import pandas as pd
|
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
from typing import Optional, Dict
|
|
|
|
|
|
|
|
|
|
PredictionsSeries = pd.Series
|
|
|
|
|
WeightsSeries = pd.Series
|
|
|
|
|
ProbabilitiesDataFrame = pd.DataFrame
|
|
|
|
|
Stats = Dict[str, float]
|
|
|
|
|
|
|
|
|
|
ModelOverTime = pd.Series
|
|
|
|
|
TransformationsOverTime = list[pd.Series]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
2022-03-03 17:40:17 +01:00
|
|
|
class BaseTrainingOutcome:
|
2022-01-29 06:41:40 +01:00
|
|
|
model_id: str
|
|
|
|
|
predictions: PredictionsSeries
|
|
|
|
|
probabilities: ProbabilitiesDataFrame
|
|
|
|
|
model_over_time: ModelOverTime
|
|
|
|
|
|
2022-02-17 19:22:17 +01:00
|
|
|
|
2022-03-02 00:26:33 +01:00
|
|
|
@dataclass
|
2022-03-03 17:40:17 +01:00
|
|
|
class TrainingOutcome(BaseTrainingOutcome):
|
2022-03-02 00:26:33 +01:00
|
|
|
transformations: TransformationsOverTime
|
2022-03-03 17:40:17 +01:00
|
|
|
stats: Optional[Stats]
|
2022-03-02 00:26:33 +01:00
|
|
|
|
|
|
|
|
|
2022-01-29 06:41:40 +01:00
|
|
|
@dataclass
|
2022-03-03 17:40:17 +01:00
|
|
|
class BetSizingWithMetaOutcome(TrainingOutcome):
|
2022-01-29 06:41:40 +01:00
|
|
|
weights: WeightsSeries
|
|
|
|
|
|
2022-02-17 19:22:17 +01:00
|
|
|
|
2022-01-29 06:41:40 +01:00
|
|
|
@dataclass
|
|
|
|
|
class PipelineOutcome:
|
2022-03-02 00:26:33 +01:00
|
|
|
directional_training: TrainingOutcome
|
2022-02-17 16:36:35 +01:00
|
|
|
bet_sizing: BetSizingWithMetaOutcome
|
2022-01-29 06:41:40 +01:00
|
|
|
|
|
|
|
|
def get_output_weights(self) -> WeightsSeries:
|
2022-02-17 16:36:35 +01:00
|
|
|
return self.bet_sizing.weights
|
2022-01-29 06:41:40 +01:00
|
|
|
|
2022-02-17 16:36:35 +01:00
|
|
|
def get_output_stats(self) -> Stats:
|
2022-02-17 19:22:17 +01:00
|
|
|
return self.bet_sizing.stats
|