Files
boc/iom/intelligence/__pycache__/prediction_engine.cpython-39.pyc
T

95 lines
8.9 KiB
Plaintext
Raw Normal View History

a
vY>j­+ã@szdZddlmZmZmZmZddlmZddlmZm Z ddl
Z
eGdddƒƒZ Gdd „d ƒZ d
d Z
ed krve
ƒdS)
zg
Prediction Engine (PRI - Predictive Reality Index)
Forecasts what will happen in 30, 90, and 365 days
é)ÚDictÚListÚOptionalÚTuple)Ú dataclass)ÚdatetimeÚ timedeltaNc@sveZdZUdZeed<eed<eed<eed<eed<ee ed<dZ
e eed <e ed
œd d ƒZ
e d
œd
dZdS)Ú
PredictionzA single predictionÚtargetÚ
current_valueÚpredicted_valueÚ
confidenceÚ horizon_daysÚdriversNÚscenario©ÚreturncCs"t|j|jt|jdƒddƒS)édé)Úroundr r Úmax©Úself©rúE/home/bernt/.openclaw/workspace/iom/intelligence/prediction_engine.pyÚchange_percentszPrediction.change_percentc Cs8|jt|jdƒt|jdƒ|jt|jdƒ|j|j|jdœS)Nr)r
r r rr
rrr) r
rr r rr
rrrrrrrÚto_dicts


øzPrediction.to_dict)Ú__name__Ú
__module__Ú __qualname__Ú__doc__ÚstrÚ__annotations__ÚfloatÚintrrrrÚpropertyrrrrrrr s
 r c@s
eZdZdZddZedœddZd"eeee e
ee d œd
d Z d#eeeee ed œd
dZ
eeeeeedœddZeeeedœddZeeeedœddZeeedœddZeeeedœddZeeeeeedœddZee
ee
edœd d!„ZdS)$ÚPredictionEnginez+Predicts future states from reality signalscCs| ¡|_dS)N)Ú_load_prediction_modelsÚmodelsrrrrÚ__init__+szPredictionEngine.__init__rcCs>gd¢dddœgd¢dddœgd¢d ddœgd
¢d ddœd œS)
z,Load prediction models for different signals)Úretail_densityÚpedestrian_flowÚ rent_burdenÚmaintenance_qualityg{®Gáz”?T)rZ trend_factorZ seasonality)Úlightingr,r.Zinformal_economyg¸…ëQ¸Ž?F)Z
playgroundÚgreeneryÚ safety_indexZschoolsZ noise_levelg{®Gáz„?)Z walkabilityZtransit_accessr0r1r+g¸…ëQ¸ž?)Ú vacancy_rateZ
crime_riskZfamily_friendlyZproperty_valuerrrrrr(.s"ýýýýðz(PredictionEngine._load_prediction_modelséZN)Úsignal_historyr
rrrc
Cs|j |i¡}| ||¡}| ||¡}d}|r:| ||¡}|d} ||| |}
| ||¡} | |||¡} t|||
| || |rˆ| d¡nddS)a_
Predict future value of a signal
Args:
signal_history: Historical signal values
target: Signal type to predict
horizon_days: Prediction horizon (30, 90, 365)
scenario: Optional scenario (e.g., "add 40 trees")
Returns:
Prediction result
réÚnameN)r
r r r
rrr)r)ÚgetÚ_get_current_valueÚ_calculate_trendÚ_calculate_scenario_effectÚ_calculate_confidenceÚ_identify_driversr )
rr4r
rrÚmodelr ÚtrendZscenario_effectÚmonthsr r
rrrrÚpredictGs&    ùzPredictionEngine.predict)r4ÚtargetsrrcCs<i}|D]}| |||¡}| ¡||<q||t ¡ ¡dœS)zPredict multiple targets)rÚ predictionsÚ timestamp)r@rrÚutcnowÚ isoformat)rr4rArrBr
ÚpredrrrÚpredict_multiple{s
ýz!PredictionEngine.predict_multiple)r4r
Ú scenariosrc Cg}| ||d¡}|D]v}| ||d|¡}|j|j}| |dt|jdƒt|dƒt|t|jdƒddƒ| dd¡| || d¡¡dœ¡q|jd d
d d || ¡||rº|d
dnddœS)
Compare multiple scenarios
Example scenarios:
- {"name": "add_40_trees", "changes": {"tree_coverage": 40}}
- {"name": "improve_lighting", "changes": {"lighting": 20}}
imr6rrrÚ
cost_estimateÚunknown)rr Ú improvementÚimprovement_percentrIÚroicSs|dS)NrKr)ÚxrrrÚ<lambda>¯óz4PredictionEngine.scenario_analysis.<locals>.<lambda>T)ÚkeyÚreverserrN)r
ÚbaselinerHÚ
best_scenario) r@r Úappendrrr7Ú_calculate_roiÚsortr) rr4r
rHÚresultsrSrrFrKrrrÚscenario_analysisŽs&
 

ú
üz"PredictionEngine.scenario_analysis)r4r
rcs*fdd|Dƒ}|r&|d dd¡SdS)zGet current value from historycsg|]}| d¡ˆkr|qS©Ú signal_type©r7©Ú.0Úr
rrÚ
<listcomp>ºrPz7PredictionEngine._get_current_value.<locals>.<listcomp>éÿÿÿÿÚvalueé2r\)rr4r
Úmatchingrr`rr8¸sz#PredictionEngine._get_current_valuecsHfdd|Dƒ}t|ƒdkr"dSdd|Dƒ}|d|dt|ƒS)z$Calculate trend from historical datacsg|]}| d¡ˆkr|qSrZr\r]r`rrraÁrPz5PredictionEngine._calculate_trend.<locals>.<listcomp>rrcSsg|]}| dd¡qS)rcrdr\r]rrrraÇrPrb)Úlen)rr4r
reÚvaluesrr`rr9¿s
 z!PredictionEngine._calculate_trend)rr
rcCs2| di¡}d}| ¡D]\}}||d7}q|S)zCalculate effect of a scenarioÚchangesrgà?)r7Úitems)rrr
rhZ total_effectr[Úchangerrrr:Ês
 z+PredictionEngine._calculate_scenario_effectcsNfdd|Dƒ}tdt|ƒdƒ}|r>|d dd¡}d}nd }||d
S) zCalculate prediction confidencecsg|]}| d¡ˆkr|qSrZr\r]r`rrra×rPz:PredictionEngine._calculate_confidence.<locals>.<listcomp>gÍÌÌÌÌÌì?é
rbrCÚgš™™™™™é?g333333Ó?r)Úminrfr7)rr4r
reZdata_confidenceZlatestZrecency_confidencerr`rr;Õsz&PredictionEngine._calculate_confidence)r4r
r=rcsvg}| dg¡D]`‰fdd|Dƒ}|rtdd|Dƒƒt|ƒ}| ˆt|dƒ|dksb|dkrfd nd
d œ¡q|S) z#Identify key drivers for predictionrcsg|]}| d¡ˆkr|qSrZr\r]©Z driver_typerrraìrPz6PredictionEngine._identify_drivers.<locals>.<listcomp>css|]}| dd¡VqdS)rcrdNr\r]rrrÚ <genexpr>îrPz5PredictionEngine._identify_drivers.<locals>.<genexpr>rr5éFÚhighÚmedium)r[r Úimpact)r7ÚsumrfrUr)rr4r
r=rZdriver_signalsZ avg_valuerrnrr<çsý