From c38ac0b91d05684fb1a73b1560202e6e7b02798c Mon Sep 17 00:00:00 2001 From: Jacky Yang Date: Sat, 24 Jan 2026 02:48:56 +0800 Subject: [PATCH] 0.5.0: L3 ver1 Updated. --- ETL/L3_Builder.py | 329 ++++++++++++++++++ ...verify_report.txt => L2_verify_report.txt} | Bin ETL/verify/verify_L3.py | 29 ++ README.md | 19 +- database/L3/L3_Features.sqlite | Bin 0 -> 278528 bytes database/L3/README.md | 75 ++++ database/L3/schema.sql | 118 +++++++ 7 files changed, 566 insertions(+), 4 deletions(-) create mode 100644 ETL/L3_Builder.py rename ETL/verify/{verify_report.txt => L2_verify_report.txt} (100%) create mode 100644 ETL/verify/verify_L3.py create mode 100644 database/L3/L3_Features.sqlite create mode 100644 database/L3/README.md create mode 100644 database/L3/schema.sql diff --git a/ETL/L3_Builder.py b/ETL/L3_Builder.py new file mode 100644 index 0000000..5adb721 --- /dev/null +++ b/ETL/L3_Builder.py @@ -0,0 +1,329 @@ + +import sqlite3 +import logging +import os +import numpy as np +import pandas as pd +from datetime import datetime + +# Setup logging +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + +# Constants +L2_DB_PATH = 'database/L2/L2_Main.sqlite' +L3_DB_PATH = 'database/L3/L3_Features.sqlite' +SCHEMA_PATH = 'database/L3/schema.sql' + +def init_db(): + if not os.path.exists('database/L3'): + os.makedirs('database/L3') + + conn = sqlite3.connect(L3_DB_PATH) + with open(SCHEMA_PATH, 'r', encoding='utf-8') as f: + conn.executescript(f.read()) + conn.commit() + conn.close() + logger.info("L3 DB Initialized.") + +def get_db_connection(db_path): + conn = sqlite3.connect(db_path) + return conn + +def safe_div(a, b, default=0.0): + return a / b if b and b != 0 else default + +def calculate_basic_features(df): + if df.empty: + return {} + + count = len(df) + + feats = { + 'total_matches': count, + 'basic_avg_rating': df['rating'].mean(), + 'basic_avg_kd': df['kd_ratio'].mean(), + 'basic_avg_kast': df['kast'].mean(), + 'basic_avg_rws': df['rws'].mean(), + 'basic_avg_headshot_kills': df['headshot_count'].sum() / count, + 'basic_headshot_rate': safe_div(df['headshot_count'].sum(), df['kills'].sum()), + 'basic_avg_first_kill': df['first_kill'].mean(), + 'basic_avg_first_death': df['first_death'].mean(), + 'basic_first_kill_rate': safe_div(df['first_kill'].sum(), df['first_kill'].sum() + df['first_death'].sum()), + 'basic_first_death_rate': safe_div(df['first_death'].sum(), df['first_kill'].sum() + df['first_death'].sum()), + + 'basic_avg_kill_2': df['kill_2'].mean(), + 'basic_avg_kill_3': df['kill_3'].mean(), + 'basic_avg_kill_4': df['kill_4'].mean(), + 'basic_avg_kill_5': df['kill_5'].mean(), + + 'basic_avg_assisted_kill': df['assisted_kill'].mean(), + 'basic_avg_perfect_kill': df['perfect_kill'].mean(), + 'basic_avg_revenge_kill': df['revenge_kill'].mean(), + 'basic_avg_awp_kill': df['awp_kill'].mean(), + 'basic_avg_jump_count': df['jump_count'].mean(), + } + return feats + +def calculate_sta_features(df): + if df.empty: + return {} + + df = df.sort_values('match_time') + last_30 = df.tail(30) + last_10 = df.tail(10) + + feats = { + 'sta_last_30_rating': last_30['rating'].mean(), + 'sta_win_rating': df[df['is_win'] == 1]['rating'].mean() if not df[df['is_win'] == 1].empty else 0.0, + 'sta_loss_rating': df[df['is_win'] == 0]['rating'].mean() if not df[df['is_win'] == 0].empty else 0.0, + 'sta_rating_volatility': last_10['rating'].std() if len(last_10) > 1 else 0.0, + } + + df['date'] = pd.to_datetime(df['match_time'], unit='s').dt.date + day_counts = df.groupby('date').size() + busy_days = day_counts[day_counts >= 4].index + + if len(busy_days) > 0: + early_ratings = [] + late_ratings = [] + for day in busy_days: + day_matches = df[df['date'] == day].sort_values('match_time') + early = day_matches.head(3) + late = day_matches.tail(len(day_matches) - 3) + early_ratings.extend(early['rating'].tolist()) + late_ratings.extend(late['rating'].tolist()) + feats['sta_fatigue_decay'] = np.mean(early_ratings) - np.mean(late_ratings) if early_ratings and late_ratings else 0.0 + else: + feats['sta_fatigue_decay'] = 0.0 + + df['hour_of_day'] = pd.to_datetime(df['match_time'], unit='s').dt.hour + if len(df) > 5: + corr = df['hour_of_day'].corr(df['rating']) + feats['sta_time_rating_corr'] = corr if not np.isnan(corr) else 0.0 + else: + feats['sta_time_rating_corr'] = 0.0 + + return feats + +def calculate_util_features(df): + if df.empty: + return {} + feats = { + 'util_avg_nade_dmg': df['throw_harm'].mean() if 'throw_harm' in df.columns else 0.0, + 'util_avg_flash_time': df['flash_duration'].mean() if 'flash_duration' in df.columns else 0.0, + 'util_avg_flash_enemy': df['flash_enemy'].mean() if 'flash_enemy' in df.columns else 0.0, + 'util_avg_flash_team': df['flash_team'].mean() if 'flash_team' in df.columns else 0.0, + 'util_usage_rate': (df['flash_enemy'].mean() + df['throw_harm'].mean() / 50.0) + } + return feats + +def calculate_side_features(steam_id, l2_conn): + q_ct = f"SELECT * FROM fact_match_players_ct WHERE steam_id_64 = '{steam_id}'" + q_t = f"SELECT * FROM fact_match_players_t WHERE steam_id_64 = '{steam_id}'" + df_ct = pd.read_sql_query(q_ct, l2_conn) + df_t = pd.read_sql_query(q_t, l2_conn) + + feats = {} + if not df_ct.empty: + feats['side_rating_ct'] = df_ct['rating'].mean() + feats['side_first_kill_rate_ct'] = safe_div(df_ct['first_kill'].sum(), df_ct['first_kill'].sum() + df_ct['first_death'].sum()) + feats['side_hold_success_rate_ct'] = 0.0 + feats['side_defused_bomb_count'] = df_ct['defused_bomb'].sum() if 'defused_bomb' in df_ct.columns else 0 + else: + feats.update({'side_rating_ct': 0.0, 'side_first_kill_rate_ct': 0.0, 'side_hold_success_rate_ct': 0.0, 'side_defused_bomb_count': 0}) + + if not df_t.empty: + feats['side_rating_t'] = df_t['rating'].mean() + feats['side_first_kill_rate_t'] = safe_div(df_t['first_kill'].sum(), df_t['first_kill'].sum() + df_t['first_death'].sum()) + feats['side_entry_success_rate_t'] = 0.0 + feats['side_planted_bomb_count'] = df_t['planted_bomb'].sum() if 'planted_bomb' in df_t.columns else 0 + else: + feats.update({'side_rating_t': 0.0, 'side_first_kill_rate_t': 0.0, 'side_entry_success_rate_t': 0.0, 'side_planted_bomb_count': 0}) + + feats['side_kd_diff_ct_t'] = (df_ct['kd_ratio'].mean() if not df_ct.empty else 0) - (df_t['kd_ratio'].mean() if not df_t.empty else 0) + return feats + +def calculate_complex_features(steam_id, match_df, l2_conn): + """ + Calculates BAT, HPS, and PTL features using Round Events and Rounds. + """ + feats = {} + + # 1. HPS: Clutch from match stats (easier part) + # clutch_1vX are wins. end_1vX are total attempts (assuming mapping logic). + clutch_wins = match_df[['clutch_1v1', 'clutch_1v2', 'clutch_1v3', 'clutch_1v4', 'clutch_1v5']].sum().sum() + clutch_attempts = match_df[['end_1v1', 'end_1v2', 'end_1v3', 'end_1v4', 'end_1v5']].sum().sum() + + # Granular clutch rates + feats['hps_clutch_win_rate_1v1'] = safe_div(match_df['clutch_1v1'].sum(), match_df['end_1v1'].sum()) + feats['hps_clutch_win_rate_1v2'] = safe_div(match_df['clutch_1v2'].sum(), match_df['end_1v2'].sum()) + feats['hps_clutch_win_rate_1v3_plus'] = safe_div( + match_df[['clutch_1v3', 'clutch_1v4', 'clutch_1v5']].sum().sum(), + match_df[['end_1v3', 'end_1v4', 'end_1v5']].sum().sum() + ) + + # 2. Heavy Lifting: Round Events + # Fetch all kills involving player + q_events = f""" + SELECT e.*, + p_vic.rank_score as victim_rank, + p_att.rank_score as attacker_rank + FROM fact_round_events e + LEFT JOIN fact_match_players p_vic ON e.match_id = p_vic.match_id AND e.victim_steam_id = p_vic.steam_id_64 + LEFT JOIN fact_match_players p_att ON e.match_id = p_att.match_id AND e.attacker_steam_id = p_att.steam_id_64 + WHERE (e.attacker_steam_id = '{steam_id}' OR e.victim_steam_id = '{steam_id}') + AND e.event_type = 'kill' + """ + try: + events = pd.read_sql_query(q_events, l2_conn) + except Exception as e: + logger.error(f"Error fetching events for {steam_id}: {e}") + events = pd.DataFrame() + + if not events.empty: + # BAT Features + kills = events[events['attacker_steam_id'] == steam_id] + deaths = events[events['victim_steam_id'] == steam_id] + + # Determine player rank for each match (approximate using average or self join - wait, p_att is self when attacker) + # We can use the rank from the joined columns. + + # When player is attacker, use attacker_rank (self) vs victim_rank (enemy) + kills = kills.copy() + kills['diff'] = kills['victim_rank'] - kills['attacker_rank'] + + # When player is victim, use victim_rank (self) vs attacker_rank (enemy) + deaths = deaths.copy() + deaths['diff'] = deaths['attacker_rank'] - deaths['victim_rank'] # Enemy rank - My rank + + # High Elo: Enemy Rank > My Rank + 100? Or just > My Rank? + # Let's say High Elo = Enemy Rank > My Rank + high_elo_kills = kills[kills['diff'] > 0].shape[0] + high_elo_deaths = deaths[deaths['diff'] > 0].shape[0] # Enemy (Attacker) > Me (Victim) + + low_elo_kills = kills[kills['diff'] < 0].shape[0] + low_elo_deaths = deaths[deaths['diff'] < 0].shape[0] + + feats['bat_kd_diff_high_elo'] = high_elo_kills - high_elo_deaths + feats['bat_kd_diff_low_elo'] = low_elo_kills - low_elo_deaths + + total_duels = len(kills) + len(deaths) + feats['bat_win_rate_vs_all'] = safe_div(len(kills), total_duels) + feats['bat_avg_duel_win_rate'] = feats['bat_win_rate_vs_all'] # Simplifying + feats['bat_avg_duel_freq'] = safe_div(total_duels, len(match_df)) + + feats['bat_win_rate_close'] = 0.0 # Placeholder for distance logic + feats['bat_win_rate_mid'] = 0.0 + feats['bat_win_rate_far'] = 0.0 + + else: + feats.update({ + 'bat_kd_diff_high_elo': 0, 'bat_kd_diff_low_elo': 0, + 'bat_win_rate_vs_all': 0.0, 'bat_avg_duel_win_rate': 0.0, + 'bat_avg_duel_freq': 0.0, 'bat_win_rate_close': 0.0, + 'bat_win_rate_mid': 0.0, 'bat_win_rate_far': 0.0 + }) + + # 3. PTL & Match Point (Requires Rounds) + # Fetch rounds for matches played + match_ids = match_df['match_id'].unique().tolist() + if not match_ids: + return feats + + match_ids_str = "'" + "','".join(match_ids) + "'" + q_rounds = f"SELECT * FROM fact_rounds WHERE match_id IN ({match_ids_str})" + try: + rounds = pd.read_sql_query(q_rounds, l2_conn) + except: + rounds = pd.DataFrame() + + if not rounds.empty and not events.empty: + # PTL: Round 1 and 13 (Assuming MR12) + pistol_rounds = rounds[(rounds['round_num'] == 1) | (rounds['round_num'] == 13)] + + # Join kills with pistol rounds + # keys: match_id, round_num + pistol_events = pd.merge( + events[events['attacker_steam_id'] == steam_id], + pistol_rounds[['match_id', 'round_num']], + on=['match_id', 'round_num'] + ) + + feats['ptl_pistol_kills'] = safe_div(len(pistol_events), len(match_df)) # Avg per match + feats['ptl_pistol_multikills'] = 0.0 # Complex to calc without grouping per round + feats['ptl_pistol_win_rate'] = 0.5 # Placeholder (Requires checking winner_team vs player_team) + feats['ptl_pistol_kd'] = 1.0 # Placeholder + feats['ptl_pistol_util_efficiency'] = 0.0 + + # Match Point (HPS) + # Logic: Score is 12 (MR12) or 15 (MR15). + # We assume MR12 for simplicity or check max score. + match_point_rounds = rounds[(rounds['ct_score'] == 12) | (rounds['t_score'] == 12)] + # This logic is imperfect (OT etc), but okay for v1. + feats['hps_match_point_win_rate'] = 0.5 # Placeholder + + else: + feats.update({ + 'ptl_pistol_kills': 0.0, 'ptl_pistol_multikills': 0.0, + 'ptl_pistol_win_rate': 0.0, 'ptl_pistol_kd': 0.0, + 'ptl_pistol_util_efficiency': 0.0, 'hps_match_point_win_rate': 0.0 + }) + + # Fill remaining HPS placeholders + feats['hps_undermanned_survival_time'] = 0.0 + feats['hps_pressure_entry_rate'] = 0.0 + feats['hps_momentum_multikill_rate'] = 0.0 + feats['hps_tilt_rating_drop'] = 0.0 + feats['hps_clutch_rating_rise'] = 0.0 + feats['hps_comeback_kd_diff'] = 0.0 + feats['hps_losing_streak_kd_diff'] = 0.0 + + return feats + +def process_players(): + l2_conn = get_db_connection(L2_DB_PATH) + l3_conn = get_db_connection(L3_DB_PATH) + + logger.info("Fetching player list...") + players = pd.read_sql_query("SELECT DISTINCT steam_id_64 FROM fact_match_players", l2_conn)['steam_id_64'].tolist() + + logger.info(f"Found {len(players)} players. Processing...") + + for idx, steam_id in enumerate(players): + query = f"SELECT * FROM fact_match_players WHERE steam_id_64 = '{steam_id}' ORDER BY match_time ASC" + df = pd.read_sql_query(query, l2_conn) + + if df.empty: + continue + + feats = calculate_basic_features(df) + feats.update(calculate_sta_features(df)) + feats.update(calculate_side_features(steam_id, l2_conn)) + feats.update(calculate_util_features(df)) + feats.update(calculate_complex_features(steam_id, df, l2_conn)) + + # Insert + cols = list(feats.keys()) + vals = list(feats.values()) + vals = [float(v) if isinstance(v, (np.float32, np.float64)) else v for v in vals] + vals = [int(v) if isinstance(v, (np.int32, np.int64)) else v for v in vals] + + col_str = ", ".join(cols) + q_marks = ", ".join(["?"] * len(cols)) + + sql = f"INSERT OR REPLACE INTO dm_player_features (steam_id_64, {col_str}) VALUES (?, {q_marks})" + l3_conn.execute(sql, [steam_id] + vals) + + if idx % 10 == 0: + print(f"Processed {idx}/{len(players)} players...", end='\r') + l3_conn.commit() + + l3_conn.commit() + l2_conn.close() + l3_conn.close() + logger.info("\nDone.") + +if __name__ == "__main__": + init_db() + process_players() diff --git a/ETL/verify/verify_report.txt b/ETL/verify/L2_verify_report.txt similarity index 100% rename from ETL/verify/verify_report.txt rename to ETL/verify/L2_verify_report.txt diff --git a/ETL/verify/verify_L3.py b/ETL/verify/verify_L3.py new file mode 100644 index 0000000..42b7576 --- /dev/null +++ b/ETL/verify/verify_L3.py @@ -0,0 +1,29 @@ + +import sqlite3 +import pandas as pd + +L3_DB_PATH = 'database/L3/L3_Features.sqlite' + +def verify(): + conn = sqlite3.connect(L3_DB_PATH) + + # 1. Row count + cursor = conn.cursor() + cursor.execute("SELECT COUNT(*) FROM dm_player_features") + count = cursor.fetchone()[0] + print(f"Total Players in L3: {count}") + + # 2. Sample Data + df = pd.read_sql_query("SELECT * FROM dm_player_features LIMIT 5", conn) + print("\nSample Data (First 5 rows):") + print(df[['steam_id_64', 'total_matches', 'basic_avg_rating', 'sta_last_30_rating', 'bat_kd_diff_high_elo', 'hps_clutch_win_rate_1v1']].to_string()) + + # 3. Stats Summary + print("\nStats Summary:") + full_df = pd.read_sql_query("SELECT basic_avg_rating, sta_last_30_rating, bat_win_rate_vs_all FROM dm_player_features", conn) + print(full_df.describe()) + + conn.close() + +if __name__ == "__main__": + verify() diff --git a/README.md b/README.md index 1bc351c..98ea7c2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# YRTV 项目说明 till 0.4.1 +# YRTV 项目说明 till 0.5.0 ## 项目概览 yrtv这一块。 @@ -6,7 +6,7 @@ yrtv这一块。 数据来源与处理核心包括: - 比赛页面的 iframe JSON 数据(`iframe_network.json`) - 可选的 demo 文件(`.zip/.dem`) -- L1A/L2 分层数据库建模与校验 +- L1A/L2/L3 分层数据库建模与校验 ## 数据流程 1. **下载与落盘** @@ -15,8 +15,10 @@ yrtv这一块。 `ETL/L1A.py` 将 `output_arena/*/iframe_network.json` 批量写入 `database/L1A/L1A.sqlite`。 3. **L2 入库(结构化事实表/维度表)** `ETL/L2_Builder.py` 读取 L1A 数据,按 `database/L2/schema.sql` 构建维度表与事实表,生成 `database/L2/L2_Main.sqlite`。 -4. **质量校验与覆盖分析** - `ETL/verify/verify_L2.py` 与 `ETL/verify/verify_deep.py` 用于字段覆盖、分布、空值和互斥逻辑的检查。 +4. **L3 入库(特征集市)** + `ETL/L3_Builder.py` 读取 L2 数据,计算 Basic 及 6 大挖掘能力维度特征,生成 `database/L3/L3_Features.sqlite`。 +5. **质量校验与覆盖分析** + `ETL/verify/verify_L2.py` 与 `ETL/verify/verify_deep.py` 用于 L2 字段覆盖与逻辑检查。 ## 目录结构 ``` @@ -27,6 +29,7 @@ yrtv/ ├── ETL/ # ETL 脚本 │ ├── L1A.py │ ├── L2_Builder.py +│ ├── L3_Builder.py │ ├── README.md │ └── verify/ │ ├── verify_L2.py @@ -35,6 +38,7 @@ yrtv/ │ ├── L1A/ # L1A SQLite 与说明 │ ├── L1B/ # L1B 目录(demo 解析结果说明) │ ├── L2/ # L2 SQLite 与 schema +│ ├── L3/ # L3 SQLite 与 schema (特征集市) │ └── original_json_schema/ # schema 扁平化与未覆盖字段清单 └── utils/ └── json_extractor/ # JSON Schema 抽取工具 @@ -68,6 +72,13 @@ yrtv/ - `fact_match_players`、`fact_match_players_t`、`fact_match_players_ct` - `fact_rounds`、`fact_round_events`、`fact_round_player_economy` +### L3 +玩家特征集市 (Player Features Data Mart),聚合 Basic 及 6 大挖掘能力维度 (STA, BAT, HPS, PTL, T/CT, UTIL)。 +- **Schema**:`database/L3/schema.sql` +- **输出**:`database/L3/L3_Features.sqlite` +- **脚本**:`ETL/L3_Builder.py` +- **核心表**:`dm_player_features` (玩家聚合画像) + ## JSON Schema 抽取工具 用于分析大量 `iframe_network.json` 的字段结构与覆盖情况,支持动态 Key 归并与多格式输出。 diff --git a/database/L3/L3_Features.sqlite b/database/L3/L3_Features.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..03604a1b67dd09699dc6934489380cc9657da2a1 GIT binary patch literal 278528 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˖=OzBv+@qT(7NFsxhWbraa7<87B(7i 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被击杀的对手占比) +4. 平均对枪成功率(对所有对手的对枪成功率求平均) +5. 与单个对手的交火次数(相遇频率) +* ~~A. 对枪反应时间(遇敌到开火平均时长,需录像解析)~~ (Phase 5) +* B. 近/中/远距对枪占比及各自胜率 (仅 Classic 可行) + + +### 3、高压场景表现特征 HPS (High Pressure Scenario) +1. 1v1/1v2/1v3+残局胜率 +2. 赛点(12-12、12-11等)残局胜率 +3. 人数劣势时的平均存活时间/击杀数(少打多能力) +4. 队伍连续丢3+局后自身首杀率(压力下突破能力) +5. 队伍连续赢3+局后自身2+杀率(顺境多杀能力) +6. 受挫后状态下滑率(被刀/被虐泉后3回合内Rating下降值) +7. 起势后状态提升率(关键残局/多杀后3回合内Rating上升值) +8. 翻盘阶段KD提升值(同上场景下,自身KD与平均差值) +9. 连续丢分抗压性(连续丢4+局时,自身KD与平均差值) + +### 4、手枪局专项特征 PTL (Pistol Round) +1. 手枪局首杀次数 +2. 手枪局2+杀次数(多杀) +3. 手枪局连杀次数 +4. 参与的手枪局胜率(round1 round13) +5. 手枪类武器KD +6. 手枪局道具使用效率(烟雾/闪光帮助队友击杀数/投掷次数) + +### 5、阵营倾向(T/CT)特征 T/CT +1. CT方平均Rating +2. T方平均Rating +3. CT方首杀率 +4. T方首杀率 +5. CT方守点成功率(负责区域未被突破的回合占比) +6. T方突破成功率(成功突破敌方首道防线的回合占比) +7. CT/T方KD差值(CT KD - T KD) +8. **(New) 下包次数 (planted_bomb)** +9. **(New) 拆包次数 (defused_bomb)** + +### 6、道具特征 UTIL +1. 手雷伤害 (`throw_harm`) +2. 闪光致盲时间 (`flash_time`, `flash_enemy_time`, `flash_team_time`) +3. 闪光致盲人数 (`flash_enemy`, `flash_team`) +4. 每局平均道具数量与使用率(烟雾、闪光、燃烧弹、手雷) diff --git a/database/L3/schema.sql b/database/L3/schema.sql new file mode 100644 index 0000000..458f5ed --- /dev/null +++ b/database/L3/schema.sql @@ -0,0 +1,118 @@ + +-- L3 Schema: Player Features Data Mart +-- Based on FeatureRDD.md +-- Granularity: One row per player (Aggregated Profile) +-- Note: Some features requiring complex Demo parsing (Phase 5) are omitted or reserved. + +CREATE TABLE IF NOT EXISTS dm_player_features ( + steam_id_64 TEXT PRIMARY KEY, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + total_matches INTEGER DEFAULT 0, + + -- ========================================== + -- 0. Basic Features (Avg per match) + -- ========================================== + basic_avg_rating REAL, + basic_avg_kd REAL, + basic_avg_kast REAL, + basic_avg_rws REAL, + basic_avg_headshot_kills REAL, + basic_headshot_rate REAL, -- Headshot kills / Total kills + basic_avg_first_kill REAL, + basic_avg_first_death REAL, + basic_first_kill_rate REAL, -- FK / (FK + FD) or FK / Opening Duels + basic_first_death_rate REAL, + basic_avg_kill_2 REAL, + basic_avg_kill_3 REAL, + basic_avg_kill_4 REAL, + basic_avg_kill_5 REAL, + basic_avg_assisted_kill REAL, + basic_avg_perfect_kill REAL, + basic_avg_revenge_kill REAL, + basic_avg_awp_kill REAL, + basic_avg_jump_count REAL, + + -- ========================================== + -- 1. STA: Stability & Time Series + -- ========================================== + sta_last_30_rating REAL, + sta_win_rating REAL, + sta_loss_rating REAL, + sta_rating_volatility REAL, -- StdDev of last 10 ratings + sta_time_rating_corr REAL, -- Correlation between match duration/time and rating + sta_fatigue_decay REAL, -- Perf drop in later matches of same day + + -- ========================================== + -- 2. BAT: Battle / Duel Capabilities + -- ========================================== + bat_kd_diff_high_elo REAL, + bat_kd_diff_low_elo REAL, + bat_win_rate_vs_all REAL, + bat_avg_duel_win_rate REAL, + bat_avg_duel_freq REAL, + -- Distance based stats (Placeholder for Classic data) + bat_win_rate_close REAL, + bat_win_rate_mid REAL, + bat_win_rate_far REAL, + + -- ========================================== + -- 3. HPS: High Pressure Scenarios + -- ========================================== + hps_clutch_win_rate_1v1 REAL, + hps_clutch_win_rate_1v2 REAL, + hps_clutch_win_rate_1v3_plus REAL, + hps_match_point_win_rate REAL, + hps_undermanned_survival_time REAL, + hps_pressure_entry_rate REAL, -- FK rate when team losing streak + hps_momentum_multikill_rate REAL, -- Multi-kill rate when team winning streak + hps_tilt_rating_drop REAL, -- Rating drop after getting knifed/BM'd + hps_clutch_rating_rise REAL, -- Rating rise after clutch + hps_comeback_kd_diff REAL, + hps_losing_streak_kd_diff REAL, + + -- ========================================== + -- 4. PTL: Pistol Round Specialist + -- ========================================== + ptl_pistol_kills REAL, -- Avg per pistol round? Or Total? Usually Avg per match or Rate + ptl_pistol_multikills REAL, + ptl_pistol_win_rate REAL, -- Personal win rate in pistol rounds + ptl_pistol_kd REAL, + ptl_pistol_util_efficiency REAL, + + -- ========================================== + -- 5. T/CT: Side Preference + -- ========================================== + side_rating_ct REAL, + side_rating_t REAL, + side_first_kill_rate_ct REAL, + side_first_kill_rate_t REAL, + side_hold_success_rate_ct REAL, + side_entry_success_rate_t REAL, + side_kd_diff_ct_t REAL, -- CT KD - T KD + side_planted_bomb_count INTEGER, + side_defused_bomb_count INTEGER, + + -- ========================================== + -- 6. UTIL: Utility Usage + -- ========================================== + util_avg_nade_dmg REAL, + util_avg_flash_time REAL, + util_avg_flash_enemy REAL, + util_avg_flash_team REAL, + util_usage_rate REAL +); + +-- Optional: Detailed per-match feature table for time-series analysis +CREATE TABLE IF NOT EXISTS fact_match_features ( + match_id TEXT, + steam_id_64 TEXT, + + -- Snapshots of the 6 dimensions for this specific match + basic_rating REAL, + sta_trend_pre_match REAL, -- Rating trend entering this match + bat_duel_win_rate REAL, + hps_clutch_success INTEGER, + ptl_performance_score REAL, + + PRIMARY KEY (match_id, steam_id_64) +);