2.0.0 Alpha: Data Refinery

This commit is contained in:
2026-08-08 21:31:56 +08:00
parent fa75081d4d
commit 562775e5db
48 changed files with 4172 additions and 661 deletions
+20 -26
View File
@@ -65,8 +65,8 @@ class CompositeProcessor(BaseFeatureProcessor):
# Classify tier based on overall score
features['tier_classification'] = CompositeProcessor._classify_tier(features['score_overall'])
# Percentile rank (placeholder - requires all players)
features['tier_percentile'] = min(features['score_overall'], 100.0)
# Filled by L3_Builder after every eligible player has been calculated.
features['tier_percentile'] = None
return features
@@ -266,13 +266,13 @@ class CompositeProcessor(BaseFeatureProcessor):
STABILITY Score (0-100) | 8%
"""
# Extract features
volatility = features.get('meta_rating_volatility', 0.0)
loss_rating = features.get('meta_loss_rating', 0.0)
consistency = features.get('meta_rating_consistency', 0.0)
tilt_resilience = features.get('int_pressure_tilt_resistance', 0.0)
map_stable = features.get('meta_map_stability', 0.0)
elo_stable = features.get('meta_elo_tier_stability', 0.0)
recent_form = features.get('meta_recent_form_rating', 0.0)
volatility = features.get('meta_rating_volatility') or 0.0
loss_rating = features.get('meta_loss_rating') or 0.0
consistency = features.get('meta_rating_consistency') or 0.0
tilt_resilience = features.get('int_pressure_tilt_resistance') or 0.0
map_stable = features.get('meta_map_stability') or 0.0
elo_stable = features.get('meta_elo_tier_stability') or 0.0
recent_form = features.get('meta_recent_form_rating') or 0.0
# Normalize
# Volatility: Reverse score. 100 - (Vol * 220)
@@ -281,8 +281,8 @@ class CompositeProcessor(BaseFeatureProcessor):
loss_score = min((loss_rating / 1.00) * 100, 100)
cons_score = min((consistency / 70) * 100, 100)
tilt_score = min((tilt_resilience / 0.80) * 100, 100)
map_score = min((map_stable / 0.25) * 100, 100)
elo_score = min((elo_stable / 0.48) * 100, 100)
map_score = max(0, min(100, 100 - (map_stable / 0.25) * 100))
elo_score = max(0, min(100, 100 - (elo_stable / 0.48) * 100))
recent_score = min((recent_form / 1.15) * 100, 100)
# Weighted Sum
@@ -337,12 +337,12 @@ class CompositeProcessor(BaseFeatureProcessor):
PACE Score (0-100) | 5%
"""
# Extract features
early_kill_pct = features.get('int_timing_early_kill_share', 0.0)
aggression = features.get('int_timing_aggression_index', 0.0)
trade_speed = features.get('int_trade_response_time', 0.0)
trade_kill = features.get('int_trade_kill_count', 0)
teamwork = features.get('int_teamwork_score', 0.0)
first_contact = features.get('int_timing_first_contact_time', 0.0)
early_kill_pct = features.get('int_timing_early_kill_share') or 0.0
aggression = features.get('int_timing_aggression_index') or 0.0
trade_speed = features.get('int_trade_response_time') or 0.0
trade_kill = features.get('int_trade_kill_count') or 0
teamwork = features.get('int_teamwork_score') or 0.0
first_contact = features.get('int_timing_first_contact_time') or 0.0
# Normalize
early_score = min((early_kill_pct / 0.44) * 100, 100)
@@ -353,7 +353,7 @@ class CompositeProcessor(BaseFeatureProcessor):
if trade_speed > 0.01:
trade_speed_score = min((2.0 / trade_speed) * 100, 100)
else:
trade_speed_score = 100 # Instant trade
trade_speed_score = 0
trade_kill_score = min((trade_kill / 650) * 100, 100)
teamwork_score = min((teamwork / 29) * 100, 100)
@@ -362,13 +362,7 @@ class CompositeProcessor(BaseFeatureProcessor):
if first_contact > 0.01:
first_contact_score = min((30 / first_contact) * 100, 100)
else:
first_contact_score = 0 # If 0, probably no data, safe to say 0? Or 100?
# 0 first contact time means instant damage.
# But "30 / Contact" means smaller contact time gives higher score.
# If contact time is 0, score explodes.
# Realistically first contact time is > 0.
# I will clamp it.
first_contact_score = 100 # Assume very fast
first_contact_score = 0
# Weighted Sum
pace_score = (
@@ -416,5 +410,5 @@ def _get_default_composite_features() -> Dict[str, Any]:
'score_pace': 0.0,
'score_overall': 0.0,
'tier_classification': 'Beginner',
'tier_percentile': 0.0,
'tier_percentile': None,
}