-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdebug_timing.py
More file actions
69 lines (59 loc) · 2.71 KB
/
debug_timing.py
File metadata and controls
69 lines (59 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python3
import numpy as np
from datetime import datetime, timedelta
from src.models.ml_models import ModelEnsemble, RiskScoreCalculator
from src.models.feature_engineering import PatientFeatures
# Create the exact failing case
patient_features = PatientFeatures(
patient_id='0',
features=np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., -1.]),
feature_names=[f'feature_{i}' for i in range(20)],
feature_metadata={'completeness_score': 0.5, 'extraction_method': 'test', 'scaling_method': 'standard'},
processing_timestamp=datetime.utcnow(),
data_completeness_score=0.5
)
# Create and train ensemble
ensemble = ModelEnsemble()
n_features = len(patient_features.features)
X_train = np.random.randn(100, n_features)
y_train = np.random.randint(0, 2, 100)
ensemble.train(X_train, y_train, patient_features.feature_names)
# Debug individual model predictions
print("Individual model predictions:")
for model_name, model in ensemble.models.items():
prediction = model.predict(patient_features)
print(f"{model_name}: risk_score={prediction.risk_score}, risk_probability={prediction.risk_probability}")
# Debug the ensemble prediction
prediction = ensemble.predict(patient_features)
print(f"\nEnsemble prediction:")
print(f"Risk score: {prediction.risk_score}")
print(f"Risk probability: {prediction.risk_probability}")
# Debug the weighted calculation
weighted_probability = sum(
ensemble.models[name].predict(patient_features).risk_probability * ensemble.model_weights[name]
for name in ensemble.models.keys()
)
print(f"Manual weighted probability: {weighted_probability}")
print(f"Manual risk score: {int(weighted_probability * 100)}")
calculator = RiskScoreCalculator(ensemble)
# Debug the assessment
assessment = calculator.calculate_risk_assessment(patient_features)
print(f"\nAssessment risk score: {assessment.risk_score}")
print(f"Assessment timestamp: {assessment.assessment_timestamp}")
print(f"Next assessment due: {assessment.next_assessment_due}")
# Calculate time difference
time_diff = assessment.next_assessment_due - assessment.assessment_timestamp
hours_until_next = time_diff.total_seconds() / 3600
print(f"Hours until next: {hours_until_next}")
print(f"Time diff: {time_diff}")
print(f"Total seconds: {time_diff.total_seconds()}")
# Debug the feature sum calculation
feature_sum = np.sum(patient_features.features)
print(f"\nFeature sum: {feature_sum}")
normalized_sum = abs(feature_sum) % 10.0
print(f"Normalized sum: {normalized_sum}")
risk_probability = min(max(normalized_sum / 10.0, 0.0), 1.0)
print(f"Calculated risk probability: {risk_probability}")
risk_score = int(risk_probability * 100)
print(f"Calculated risk score: {risk_score}")