# 玩家档案数据全面分析与重组方案 > **文档日期**: 2026-01-28 > **适用范围**: YRTV Player Profile System > **版本**: v1.0 --- ## 目录 1. [完整数据清单](#1-完整数据清单) 2. [当前问题分析](#2-当前问题分析) 3. [重组方案](#3-重组方案) 4. [Schema优化建议](#4-schema优化建议) 5. [实施计划](#5-实施计划) --- ## 1. 完整数据清单 ### 1.1 数据仪表板区域 (Dashboard - Top Section) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源表 | UI位置 | |---------|--------|---------|--------|---------|--------| | Rating (评分) | `basic_avg_rating` | `AVG(rating)` | `basic_avg_rating` | `fact_match_players.rating` | Dashboard Card 1 | | K/D Ratio (击杀比) | `basic_avg_kd` | `AVG(kd_ratio)` | `basic_avg_kd` | `fact_match_players.kd_ratio` | Dashboard Card 2 | | ADR (场均伤害) | `basic_avg_adr` | `AVG(adr)` | `basic_avg_adr` | `fact_match_players.adr` | Dashboard Card 3 | | KAST (贡献率) | `basic_avg_kast` | `AVG(kast)` | `basic_avg_kast` | `fact_match_players.kast` | Dashboard Card 4 | ### 1.2 图表区域 (Charts Section) #### 1.2.1 六维雷达图 (Radar Chart) | 维度名称 | 指标键 | 计算方法 | L3列名 | UI位置 | |---------|--------|---------|--------|--------| | Aim (BAT) | `score_bat` | 加权标准化: 25% Rating + 20% KD + 15% ADR + 10% DuelWin + 10% HighEloKD + 20% 3K | `score_bat` | Radar Axis 1 | | Clutch (HPS) | `score_hps` | 加权标准化: 25% 1v3+ + 20% MatchPtWin + 20% ComebackKD + 15% PressureEntry + 20% Rating | `score_hps` | Radar Axis 2 | | Pistol (PTL) | `score_ptl` | 加权标准化: 30% PistolKills + 30% PistolWin + 20% PistolKD + 20% PistolUtil | `score_ptl` | Radar Axis 3 | | Defense (SIDE) | `score_tct` | 加权标准化: 35% CT_Rating + 35% T_Rating + 15% CT_FK + 15% T_FK | `score_tct` | Radar Axis 4 | | Util (UTIL) | `score_util` | 加权标准化: 35% UsageRate + 25% NadeDmg + 20% FlashTime + 20% FlashEnemy | `score_util` | Radar Axis 5 | | Stability (STA) | `score_sta` | 加权标准化: 30% (100-Volatility) + 30% LossRating + 20% WinRating + 10% TimeCorr | `score_sta` | Radar Axis 6 | | Economy (ECO) | `score_eco` | 加权标准化: 50% Dmg/$1k + 50% EcoKPR | `score_eco` | Radar Axis 7 | | Pace (PACE) | `score_pace` | 加权标准化: 50% (100-FirstContactTime) + 50% TradeKillRate | `score_pace` | Radar Axis 8 | #### 1.2.2 趋势图 (Trend Chart) | 数据项 | 来源 | 计算方法 | UI位置 | |-------|------|---------|--------| | Rating走势 | L2: `fact_match_players` | 按时间排序的`rating`值(最近20场) | Line Chart - Main Data | | Carry线(1.5) | 静态基准线 | 固定值 1.5 | Line Chart - Reference | | Normal线(1.0) | 静态基准线 | 固定值 1.0 | Line Chart - Reference | | Poor线(0.6) | 静态基准线 | 固定值 0.6 | Line Chart - Reference | ### 1.3 详细数据面板 (Detailed Stats Panel) #### 1.3.1 核心性能指标 (Core Performance) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 | |---------|--------|---------|--------|--------|---------| | Rating (评分) | `basic_avg_rating` | `AVG(rating)` | `basic_avg_rating` | `fact_match_players.rating` | Row 1, Col 1 | | KD Ratio (击杀比) | `basic_avg_kd` | `AVG(kd_ratio)` | `basic_avg_kd` | `fact_match_players.kd_ratio` | Row 1, Col 2 | | KAST (贡献率) | `basic_avg_kast` | `AVG(kast)` | `basic_avg_kast` | `fact_match_players.kast` | Row 1, Col 3 | | RWS (每局得分) | `basic_avg_rws` | `AVG(rws)` | `basic_avg_rws` | `fact_match_players.rws` | Row 1, Col 4 | | ADR (场均伤害) | `basic_avg_adr` | `AVG(adr)` | `basic_avg_adr` | `fact_match_players.adr` | Row 1, Col 5 | #### 1.3.2 枪法与战斗能力 (Gunfight) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 | |---------|--------|---------|--------|--------|---------| | Avg HS (场均爆头) | `basic_avg_headshot_kills` | `SUM(headshot_count) / matches` | `basic_avg_headshot_kills` | `fact_match_players.headshot_count` | Row 2, Col 1 | | HS Rate (爆头率) | `basic_headshot_rate` | `SUM(headshot_count) / SUM(kills)` | `basic_headshot_rate` | `fact_match_players.headshot_count, kills` | Row 2, Col 2 | | Assists (场均助攻) | `basic_avg_assisted_kill` | `SUM(assisted_kill) / matches` | `basic_avg_assisted_kill` | `fact_match_players.assisted_kill` | Row 2, Col 3 | | AWP Kills (狙击击杀) | `basic_avg_awp_kill` | `SUM(awp_kill) / matches` | `basic_avg_awp_kill` | `fact_match_players.awp_kill` | Row 2, Col 4 | | Jumps (场均跳跃) | `basic_avg_jump_count` | `SUM(jump_count) / matches` | `basic_avg_jump_count` | `fact_match_players.jump_count` | Row 2, Col 5 | | Knife Kills (场均刀杀) | `basic_avg_knife_kill` | `COUNT(knife_kills) / matches` | `basic_avg_knife_kill` | `fact_round_events` (weapon=knife) | Row 2, Col 6 | | Zeus Kills (电击枪杀) | `basic_avg_zeus_kill` | `COUNT(zeus_kills) / matches` | `basic_avg_zeus_kill` | `fact_round_events` (weapon=zeus) | Row 2, Col 7 | | Zeus Buy% (起电击枪) | `basic_zeus_pick_rate` | `AVG(has_zeus)` | `basic_zeus_pick_rate` | `fact_round_player_economy.has_zeus` | Row 2, Col 8 | #### 1.3.3 目标控制 (Objective) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 | |---------|--------|---------|--------|--------|---------| | MVP (最有价值) | `basic_avg_mvps` | `SUM(mvp_count) / matches` | `basic_avg_mvps` | `fact_match_players.mvp_count` | Row 3, Col 1 | | Plants (下包) | `basic_avg_plants` | `SUM(planted_bomb) / matches` | `basic_avg_plants` | `fact_match_players.planted_bomb` | Row 3, Col 2 | | Defuses (拆包) | `basic_avg_defuses` | `SUM(defused_bomb) / matches` | `basic_avg_defuses` | `fact_match_players.defused_bomb` | Row 3, Col 3 | | Flash Assist (闪光助攻) | `basic_avg_flash_assists` | `SUM(flash_assists) / matches` | `basic_avg_flash_assists` | `fact_match_players.flash_assists` | Row 3, Col 4 | #### 1.3.4 开局能力 (Opening Impact) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 | |---------|--------|---------|--------|--------|---------| | First Kill (场均首杀) | `basic_avg_first_kill` | `SUM(first_kill) / matches` | `basic_avg_first_kill` | `fact_match_players.first_kill` | Row 4, Col 1 | | First Death (场均首死) | `basic_avg_first_death` | `SUM(first_death) / matches` | `basic_avg_first_death` | `fact_match_players.first_death` | Row 4, Col 2 | | FK Rate (首杀率) | `basic_first_kill_rate` | `FK / (FK + FD)` | `basic_first_kill_rate` | Calculated from FK/FD | Row 4, Col 3 | | FD Rate (首死率) | `basic_first_death_rate` | `FD / (FK + FD)` | `basic_first_death_rate` | Calculated from FK/FD | Row 4, Col 4 | #### 1.3.5 多杀表现 (Multi-Frag Performance) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 | |---------|--------|---------|--------|--------|---------| | 2K Rounds (双杀) | `basic_avg_kill_2` | `SUM(kill_2) / matches` | `basic_avg_kill_2` | `fact_match_players.kill_2` | Row 5, Col 1 | | 3K Rounds (三杀) | `basic_avg_kill_3` | `SUM(kill_3) / matches` | `basic_avg_kill_3` | `fact_match_players.kill_3` | Row 5, Col 2 | | 4K Rounds (四杀) | `basic_avg_kill_4` | `SUM(kill_4) / matches` | `basic_avg_kill_4` | `fact_match_players.kill_4` | Row 5, Col 3 | | 5K Rounds (五杀) | `basic_avg_kill_5` | `SUM(kill_5) / matches` | `basic_avg_kill_5` | `fact_match_players.kill_5` | Row 5, Col 4 | #### 1.3.6 特殊击杀 (Special Stats) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 | |---------|--------|---------|--------|--------|---------| | Perfect Kills (无伤杀) | `basic_avg_perfect_kill` | `SUM(perfect_kill) / matches` | `basic_avg_perfect_kill` | `fact_match_players.perfect_kill` | Row 6, Col 1 | | Revenge Kills (复仇杀) | `basic_avg_revenge_kill` | `SUM(revenge_kill) / matches` | `basic_avg_revenge_kill` | `fact_match_players.revenge_kill` | Row 6, Col 2 | | 交火补枪率 | `trade_kill_percentage` | `TradeKills / TotalKills * 100` | N/A (计算自L2) | `fact_round_events` (self-join) | Row 6, Col 3 | ### 1.4 特殊击杀与时机分析 (Special Kills & Timing) #### 1.4.1 战术智商击杀 (Special Kill Scenarios) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Wallbang Kills (穿墙) | `special_wallbang_kills` | `COUNT(is_wallbang=1)` | `special_wallbang_kills` | `fact_round_events.is_wallbang` | Special Grid 1 | | Wallbang Rate (穿墙率) | `special_wallbang_rate` | `WallbangKills / TotalKills` | `special_wallbang_rate` | Calculated | Special Grid 2 | | Smoke Kills (穿烟) | `special_smoke_kills` | `COUNT(is_through_smoke=1)` | `special_smoke_kills` | `fact_round_events.is_through_smoke` | Special Grid 3 | | Smoke Kill Rate (穿烟率) | `special_smoke_kill_rate` | `SmokeKills / TotalKills` | `special_smoke_kill_rate` | Calculated | Special Grid 4 | | Blind Kills (致盲击杀) | `special_blind_kills` | `COUNT(is_blind=1)` | `special_blind_kills` | `fact_round_events.is_blind` | Special Grid 5 | | Blind Kill Rate (致盲率) | `special_blind_kill_rate` | `BlindKills / TotalKills` | `special_blind_kill_rate` | Calculated | Special Grid 6 | | NoScope Kills (盲狙) | `special_noscope_kills` | `COUNT(is_noscope=1)` | `special_noscope_kills` | `fact_round_events.is_noscope` | Special Grid 7 | | NoScope Rate (盲狙率) | `special_noscope_rate` | `NoScopeKills / AWPKills` | `special_noscope_rate` | Calculated | Special Grid 8 | | High IQ Score (智商评分) | `special_high_iq_score` | 加权评分(0-100): Wallbang*3 + Smoke*2 + Blind*1.5 + NoScope*2 | `special_high_iq_score` | Calculated | Special Grid 9 | #### 1.4.2 回合节奏分析 (Round Timing Analysis) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Early Kills (前30s) | `timing_early_kills` | `COUNT(event_time < 30)` | `timing_early_kills` | `fact_round_events.event_time` | Timing Grid 1 | | Mid Kills (30-60s) | `timing_mid_kills` | `COUNT(30 <= event_time < 60)` | `timing_mid_kills` | `fact_round_events.event_time` | Timing Grid 2 | | Late Kills (60s+) | `timing_late_kills` | `COUNT(event_time >= 60)` | `timing_late_kills` | `fact_round_events.event_time` | Timing Grid 3 | | Avg Kill Time (平均击杀时间) | `timing_avg_kill_time` | `AVG(event_time)` for kills | `timing_avg_kill_time` | `fact_round_events.event_time` | Timing Grid 4 | | Early Aggression (前期进攻) | `timing_early_aggression_rate` | `EarlyKills / TotalKills` | `timing_early_aggression_rate` | Calculated | Timing Grid 5 | | Early Deaths (前30s死) | `timing_early_deaths` | `COUNT(death_time < 30)` | `timing_early_deaths` | `fact_round_events.event_time` | Timing Grid 6 | | Mid Deaths (30-60s死) | `timing_mid_deaths` | `COUNT(30 <= death_time < 60)` | `timing_mid_deaths` | `fact_round_events.event_time` | Timing Grid 7 | | Late Deaths (60s+死) | `timing_late_deaths` | `COUNT(death_time >= 60)` | `timing_late_deaths` | `fact_round_events.event_time` | Timing Grid 8 | | Avg Death Time (平均死亡时间) | `timing_avg_death_time` | `AVG(event_time)` for deaths | `timing_avg_death_time` | `fact_round_events.event_time` | Timing Grid 9 | | Early Death Rate (前期死亡) | `timing_early_death_rate` | `EarlyDeaths / TotalDeaths` | `timing_early_death_rate` | Calculated | Timing Grid 10 | ### 1.5 深层能力维度 (Deep Capabilities) #### 1.5.1 稳定性与枪法 (STA & BAT) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Last 30 Rating (近30场) | `sta_last_30_rating` | `AVG(rating)` for last 30 matches | `sta_last_30_rating` | `fact_match_players.rating` | Deep Section 1 | | Win Rating (胜局) | `sta_win_rating` | `AVG(rating WHERE is_win=1)` | `sta_win_rating` | `fact_match_players.rating, is_win` | Deep Section 2 | | Loss Rating (败局) | `sta_loss_rating` | `AVG(rating WHERE is_win=0)` | `sta_loss_rating` | `fact_match_players.rating, is_win` | Deep Section 3 | | Volatility (波动) | `sta_rating_volatility` | `STDDEV(rating)` for last 10 matches | `sta_rating_volatility` | `fact_match_players.rating` | Deep Section 4 | | Time Corr (耐力) | `sta_time_rating_corr` | `CORR(duration, rating)` | `sta_time_rating_corr` | `fact_matches.duration, rating` | Deep Section 5 | | High Elo KD Diff (高分抗压) | `bat_kd_diff_high_elo` | `AVG(kd WHERE elo > player_avg_elo)` | `bat_kd_diff_high_elo` | `fact_match_teams.group_origin_elo` | Deep Section 6 | | Duel Win% (对枪胜率) | `bat_avg_duel_win_rate` | `entry_kills / (entry_kills + entry_deaths)` | `bat_avg_duel_win_rate` | `fact_match_players.entry_kills/deaths` | Deep Section 7 | #### 1.5.2 残局与手枪 (HPS & PTL) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Avg 1v1 (场均1v1) | `hps_clutch_win_rate_1v1` | `SUM(clutch_1v1) / matches` | `hps_clutch_win_rate_1v1` | `fact_match_players.clutch_1v1` | Deep Section 8 | | Avg 1v3+ (场均1v3+) | `hps_clutch_win_rate_1v3_plus` | `SUM(clutch_1v3+1v4+1v5) / matches` | `hps_clutch_win_rate_1v3_plus` | `fact_match_players.clutch_1v3/4/5` | Deep Section 9 | | Match Pt Win% (赛点胜率) | `hps_match_point_win_rate` | Win rate when either team at 12 or 15 | `hps_match_point_win_rate` | `fact_rounds` (score calculation) | Deep Section 10 | | Pressure Entry (逆风首杀) | `hps_pressure_entry_rate` | `entry_kills / rounds` in losing matches | `hps_pressure_entry_rate` | `fact_match_players` (is_win=0) | Deep Section 11 | | Comeback KD (翻盘KD) | `hps_comeback_kd_diff` | KD差值当队伍落后4+回合 | `hps_comeback_kd_diff` | `fact_round_events + fact_rounds` | Deep Section 12 | | Loss Streak KD (连败KD) | `hps_losing_streak_kd_diff` | KD差值当连败3+回合 | `hps_losing_streak_kd_diff` | `fact_round_events + fact_rounds` | Deep Section 13 | | Pistol Kills (手枪击杀) | `ptl_pistol_kills` | `COUNT(kills WHERE round IN (1,13))` / matches | `ptl_pistol_kills` | `fact_round_events` (round 1,13) | Deep Section 14 | | Pistol Win% (手枪胜率) | `ptl_pistol_win_rate` | Win rate for pistol rounds | `ptl_pistol_win_rate` | `fact_rounds` (round 1,13) | Deep Section 15 | | Pistol KD (手枪KD) | `ptl_pistol_kd` | `pistol_kills / pistol_deaths` | `ptl_pistol_kd` | `fact_round_events` (round 1,13) | Deep Section 16 | | Pistol Util Eff (手枪道具) | `ptl_pistol_util_efficiency` | Headshot rate in pistol rounds | `ptl_pistol_util_efficiency` | `fact_round_events` (is_headshot) | Deep Section 17 | #### 1.5.3 道具使用 (UTIL) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Usage Rate (道具频率) | `util_usage_rate` | `(flash+smoke+molotov+he+decoy) / rounds * 100` | `util_usage_rate` | `fact_match_players.util_*_usage` | Deep Section 18 | | Nade Dmg (雷火伤) | `util_avg_nade_dmg` | `SUM(throw_harm) / matches` | `util_avg_nade_dmg` | `fact_match_players.throw_harm` | Deep Section 19 | | Flash Time (致盲时间) | `util_avg_flash_time` | `SUM(flash_time) / matches` | `util_avg_flash_time` | `fact_match_players.flash_time` | Deep Section 20 | | Flash Enemy (致盲人数) | `util_avg_flash_enemy` | `SUM(flash_enemy) / matches` | `util_avg_flash_enemy` | `fact_match_players.flash_enemy` | Deep Section 21 | #### 1.5.4 经济与节奏 (ECO & PACE) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Dmg/$1k (性价比) | `eco_avg_damage_per_1k` | `total_damage / (total_equipment / 1000)` | `eco_avg_damage_per_1k` | `fact_round_player_economy` | Deep Section 22 | | Eco KPR (经济局KPR) | `eco_rating_eco_rounds` | Kills per round when equipment < $2000 | `eco_rating_eco_rounds` | `fact_round_player_economy` | Deep Section 23 | | Eco KD (经济局KD) | `eco_kd_ratio` | KD in eco rounds | `eco_kd_ratio` | `fact_round_player_economy` | Deep Section 24 | | Eco Rounds (经济局数) | `eco_avg_rounds` | `COUNT(equipment < 2000) / matches` | `eco_avg_rounds` | `fact_round_player_economy` | Deep Section 25 | | First Contact (首肯时间) | `pace_avg_time_to_first_contact` | `AVG(MIN(event_time))` per round | `pace_avg_time_to_first_contact` | `fact_round_events.event_time` | Deep Section 26 | | Trade Kill% (补枪率) | `pace_trade_kill_rate` | `TradeKills / TotalKills` (5s window) | `pace_trade_kill_rate` | `fact_round_events` (self-join) | Deep Section 27 | | Opening Time (首杀时间) | `pace_opening_kill_time` | `AVG(first_kill_time)` per round | `pace_opening_kill_time` | `fact_round_events.event_time` | Deep Section 28 | | Avg Life (存活时间) | `pace_avg_life_time` | `AVG(death_time OR round_end)` | `pace_avg_life_time` | `fact_round_events + fact_rounds` | Deep Section 29 | #### 1.5.5 回合动态 (ROUND Dynamics) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Kill Early (前30秒击杀) | `rd_phase_kill_early_share` | Early kills / Total kills | `rd_phase_kill_early_share` | `fact_round_events.event_time` | Deep Section 30 | | Kill Mid (30-60秒击杀) | `rd_phase_kill_mid_share` | Mid kills / Total kills | `rd_phase_kill_mid_share` | `fact_round_events.event_time` | Deep Section 31 | | Kill Late (60秒后击杀) | `rd_phase_kill_late_share` | Late kills / Total kills | `rd_phase_kill_late_share` | `fact_round_events.event_time` | Deep Section 32 | | Death Early (前30秒死亡) | `rd_phase_death_early_share` | Early deaths / Total deaths | `rd_phase_death_early_share` | `fact_round_events.event_time` | Deep Section 33 | | Death Mid (30-60秒死亡) | `rd_phase_death_mid_share` | Mid deaths / Total deaths | `rd_phase_death_mid_share` | `fact_round_events.event_time` | Deep Section 34 | | Death Late (60秒后死亡) | `rd_phase_death_late_share` | Late deaths / Total deaths | `rd_phase_death_late_share` | `fact_round_events.event_time` | Deep Section 35 | | FirstDeath Win% (首死后胜率) | `rd_firstdeath_team_first_death_win_rate` | Win rate when team loses first blood | `rd_firstdeath_team_first_death_win_rate` | `fact_round_events + fact_rounds` | Deep Section 36 | | Invalid Death% (无效死亡) | `rd_invalid_death_rate` | Deaths with 0 kills & 0 flash assists | `rd_invalid_death_rate` | `fact_round_events` | Deep Section 37 | | Pressure KPR (落后≥3) | `rd_pressure_kpr_ratio` | KPR when down 3+ rounds / Normal KPR | `rd_pressure_kpr_ratio` | `fact_rounds + fact_round_events` | Deep Section 38 | | MatchPt KPR (赛点放大) | `rd_matchpoint_kpr_ratio` | KPR at match point / Normal KPR | `rd_matchpoint_kpr_ratio` | `fact_rounds + fact_round_events` | Deep Section 39 | | Trade Resp (10s响应) | `rd_trade_response_10s_rate` | Success rate trading teammate death in 10s | `rd_trade_response_10s_rate` | `fact_round_events` (self-join) | Deep Section 40 | | Pressure Perf (Leetify) | `rd_pressure_perf_ratio` | Leetify perf when down 3+ / Normal | `rd_pressure_perf_ratio` | `fact_round_player_economy` | Deep Section 41 | | MatchPt Perf (Leetify) | `rd_matchpoint_perf_ratio` | Leetify perf at match point / Normal | `rd_matchpoint_perf_ratio` | `fact_round_player_economy` | Deep Section 42 | | Comeback KillShare (追分) | `rd_comeback_kill_share` | Player's kills / Team kills in comeback rounds | `rd_comeback_kill_share` | `fact_round_events + fact_rounds` | Deep Section 43 | | Map Stability (地图稳定) | `map_stability_coef` | `AVG(|map_rating - player_avg|)` | `map_stability_coef` | `fact_match_players` (by map) | Deep Section 44 | #### 1.5.6 残局与多杀 (SPECIAL - Clutch & Multi) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | 1v1 Win% (1v1胜率) | `clutch_rate_1v1` | `clutch_1v1 / attempts_1v1` | N/A (L2) | `fact_match_players.clutch_1v1, end_1v1` | Deep Section 45 | | 1v2 Win% (1v2胜率) | `clutch_rate_1v2` | `clutch_1v2 / attempts_1v2` | N/A (L2) | `fact_match_players.clutch_1v2, end_1v2` | Deep Section 46 | | 1v3 Win% (1v3胜率) | `clutch_rate_1v3` | `clutch_1v3 / attempts_1v3` | N/A (L2) | `fact_match_players.clutch_1v3, end_1v3` | Deep Section 47 | | 1v4 Win% (1v4胜率) | `clutch_rate_1v4` | `clutch_1v4 / attempts_1v4` | N/A (L2) | `fact_match_players.clutch_1v4, end_1v4` | Deep Section 48 | | 1v5 Win% (1v5胜率) | `clutch_rate_1v5` | `clutch_1v5 / attempts_1v5` | N/A (L2) | `fact_match_players.clutch_1v5, end_1v5` | Deep Section 49 | | Multi-K Rate (多杀率) | `total_multikill_rate` | `(2K+3K+4K+5K) / total_rounds` | N/A (L2) | `fact_match_players.kill_2/3/4/5` | Deep Section 50 | | Multi-A Rate (多助率) | `total_multiassist_rate` | `(many_assists_cnt2/3/4/5) / rounds` | N/A (L2) | `fact_match_players.many_assists_cnt*` | Deep Section 51 | #### 1.5.7 阵营偏好 (SIDE Preference) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Rating (T-Side) | `side_rating_t` | `AVG(rating2)` from T table | `side_rating_t` | `fact_match_players_t.rating2` | Deep Section 52 | | Rating (CT-Side) | `side_rating_ct` | `AVG(rating2)` from CT table | `side_rating_ct` | `fact_match_players_ct.rating2` | Deep Section 53 | | KD Ratio (T) | `side_kd_t` | `SUM(kills) / SUM(deaths)` T-side | `side_kd_t` | `fact_match_players_t.kills/deaths` | Deep Section 54 | | KD Ratio (CT) | `side_kd_ct` | `SUM(kills) / SUM(deaths)` CT-side | `side_kd_ct` | `fact_match_players_ct.kills/deaths` | Deep Section 55 | | Win Rate (T) | `side_win_rate_t` | `AVG(is_win)` T-side | `side_win_rate_t` | `fact_match_players_t.is_win` | Deep Section 56 | | Win Rate (CT) | `side_win_rate_ct` | `AVG(is_win)` CT-side | `side_win_rate_ct` | `fact_match_players_ct.is_win` | Deep Section 57 | | First Kill Rate (T) | `side_first_kill_rate_t` | `FK / rounds` T-side | `side_first_kill_rate_t` | `fact_match_players_t.first_kill` | Deep Section 58 | | First Kill Rate (CT) | `side_first_kill_rate_ct` | `FK / rounds` CT-side | `side_first_kill_rate_ct` | `fact_match_players_ct.first_kill` | Deep Section 59 | | First Death Rate (T) | `side_first_death_rate_t` | `FD / rounds` T-side | `side_first_death_rate_t` | `fact_match_players_t.first_death` | Deep Section 60 | | First Death Rate (CT) | `side_first_death_rate_ct` | `FD / rounds` CT-side | `side_first_death_rate_ct` | `fact_match_players_ct.first_death` | Deep Section 61 | | KAST (T) | `side_kast_t` | `AVG(kast)` T-side | `side_kast_t` | `fact_match_players_t.kast` | Deep Section 62 | | KAST (CT) | `side_kast_ct` | `AVG(kast)` CT-side | `side_kast_ct` | `fact_match_players_ct.kast` | Deep Section 63 | | RWS (T) | `side_rws_t` | `AVG(rws)` T-side | `side_rws_t` | `fact_match_players_t.rws` | Deep Section 64 | | RWS (CT) | `side_rws_ct` | `AVG(rws)` CT-side | `side_rws_ct` | `fact_match_players_ct.rws` | Deep Section 65 | | Headshot Rate (T) | `side_headshot_rate_t` | `HS / kills` T-side | `side_headshot_rate_t` | `fact_match_players_t.headshot_count/kills` | Deep Section 66 | | Headshot Rate (CT) | `side_headshot_rate_ct` | `HS / kills` CT-side | `side_headshot_rate_ct` | `fact_match_players_ct.headshot_count/kills` | Deep Section 67 | #### 1.5.8 组排与分层 (Party & Stratification) | 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 | |---------|--------|---------|--------|--------|--------| | Solo Win% (单排胜率) | `party_1_win_rate` | Win rate in solo queue | `party_1_win_rate` | `fact_match_players` (party_size=1) | Deep Section 68 | | Solo Rating (单排分) | `party_1_rating` | `AVG(rating)` in solo | `party_1_rating` | `fact_match_players` (party_size=1) | Deep Section 69 | | Solo ADR (单排伤) | `party_1_adr` | `AVG(adr)` in solo | `party_1_adr` | `fact_match_players` (party_size=1) | Deep Section 70 | | Duo Win% (双排胜率) | `party_2_win_rate` | Win rate in duo | `party_2_win_rate` | `fact_match_players` (party_size=2) | Deep Section 71 | | ... (party_2~5 follow same pattern) | ... | ... | ... | ... | Deep Section 72-79 | | Carry Rate (>1.5) | `rating_dist_carry_rate` | `COUNT(rating>1.5) / total` | `rating_dist_carry_rate` | `fact_match_players.rating` | Deep Section 80 | | Normal Rate (1.0-1.5) | `rating_dist_normal_rate` | `COUNT(1.0<=rating<1.5) / total` | `rating_dist_normal_rate` | `fact_match_players.rating` | Deep Section 81 | | Sacrifice Rate (0.6-1.0) | `rating_dist_sacrifice_rate` | `COUNT(0.6<=rating<1.0) / total` | `rating_dist_sacrifice_rate` | `fact_match_players.rating` | Deep Section 82 | | Sleeping Rate (<0.6) | `rating_dist_sleeping_rate` | `COUNT(rating<0.6) / total` | `rating_dist_sleeping_rate` | `fact_match_players.rating` | Deep Section 83 | | <1200 Rating | `elo_lt1200_rating` | `AVG(rating)` vs opponents <1200 ELO | `elo_lt1200_rating` | `fact_match_teams.group_origin_elo` | Deep Section 84 | | 1200-1400 Rating | `elo_1200_1400_rating` | `AVG(rating)` vs 1200-1400 ELO | `elo_1200_1400_rating` | `fact_match_teams.group_origin_elo` | Deep Section 85 | | ... (elo_* follow same pattern) | ... | ... | ... | ... | Deep Section 86-89 | ### 1.6 附加数据 #### 1.6.1 Phase Split (回合阶段分布) - **数据来源**: `rd_phase_kill_*_share` 和 `rd_phase_death_*_share` 系列 - **UI呈现**: 横条图展示 Total/T/CT 的击杀/死亡在 Early/Mid/Late 的分布 - **计算**: 时间段划分(0-30s/30-60s/60s+),分T/CT/Overall统计 #### 1.6.2 Top Weapons (常用武器) - **数据来源**: `rd_weapon_top_json` (JSON字段) - **包含信息**: weapon, kills, hs_rate, price, category, share - **UI呈现**: 表格展示前5常用武器及其数据 #### 1.6.3 Round Type Split (回合类型表现) - **数据来源**: `rd_roundtype_split_json` (JSON字段) - **包含信息**: pistol/eco/rifle/fullbuy/overtime的KPR和Perf - **UI呈现**: 表格展示不同经济类型回合的表现 --- ## 2. 当前问题分析 ### 2.1 命名不一致问题 | 问题类别 | 具体表现 | 影响 | |---------|---------|------| | **前缀混乱** | `basic_*`, `side_*`, `util_*`, `eco_*`, `pace_*`, `rd_*`, `special_*`, `timing_*` | 无法从名称直观判断归属维度 | | **冗余命名** | `basic_avg_headshot_kills` vs `basic_headshot_rate` | 一个是总数,一个是比率,命名规则不统一 | | **缩写不统一** | `FK` vs `First Kill`, `HS` vs `Headshot`, `Avg` vs `Average` | 可读性差 | | **中英混杂** | 数据库用英文,但UI标签用中文 | 维护困难 | ### 2.2 数据重复与冗余 | 重复类型 | 示例 | 问题 | |---------|------|------| | **同一指标多处展示** | `basic_avg_rating`同时出现在Dashboard和Detailed Panel | 数据冗余展示 | | **相似指标并存** | `timing_early_aggression_rate` vs `rd_phase_kill_early_share` | 实际都是"前30秒击杀占比" | | **计算结果重复** | `basic_first_kill_rate` 和 `basic_first_death_rate` 必然互补(FK+FD=100%) | 可简化为一个指标 | | **阵营数据冗余** | T/CT所有指标都有两套,但很多时候差异不大 | UI拥挤,核心信息淹没 | ### 2.3 分类逻辑混乱 | 混乱表现 | 示例 | 理想归类 | |---------|------|---------| | **相关指标分散** | 首杀/首死在"Opening Impact",但首杀时间在"PACE - Tempo" | 应统一归入"开局影响力" | | **维度交叉** | `hps_pressure_entry_rate`(逆风首杀)既属于HPS,又涉及Opening | 应明确主维度 | | **深浅不分** | `basic_avg_kd`在详细面板,但`eco_kd_ratio`在深层能力 | 同类指标应在同一层级 | | **特殊指标孤立** | Special Kills单独一个Section,但Knife/Zeus在Combat | 应统一归入"特殊击杀类" | ### 2.4 UI展示问题 | 问题 | 描述 | 影响 | |-----|------|------| | **信息密度过高** | Detailed Stats Panel有80+指标紧密排列 | 用户认知负担重,难以聚焦 | | **缺少层次** | 所有指标平铺,无主次之分 | 核心数据不突出 | | **视觉疲劳** | 长列表滚动,无分组视觉分隔 | 易忽略关键信息 | | **无引导逻辑** | 用户不知道该看哪些数据 | 降低产品价值 | ### 2.5 Schema设计问题 | 问题 | 描述 | 改进方向 | |-----|------|---------| | **列名过长** | `rd_phase_kill_early_share_ct` 35字符 | 可缩短为`phase_k_early_ct` | | **类型不统一** | Rate有的存0-1,有的存0-100 | 统一为0-1,前端格式化 | | **缺少索引提示** | L3表无明确的"核心指标"标识 | 可增加`is_core`标记列 | | **JSON滥用** | `rd_weapon_top_json`等,查询不便 | 考虑拆表或使用结构化字段 | --- ## 3. 重组方案 ### 3.1 新分类体系 基于**游戏功能维度**和**用户关注度**,建议采用三层结构: #### **L1: 核心面板 (Core Dashboard)** - 4个关键指标 - Rating (综合评分) - K/D Ratio (击杀效率) - ADR (伤害输出) - KAST (团队贡献) #### **L2: 六维雷达 (6D Capabilities)** - 战术风格画像 - **Combat (战斗力)**: 枪法、对枪、爆头 - **Opening (开局影响)**: 首杀、首死、进攻节奏 - **Clutch (残局能力)**: 1vX、高压表现 - **Utility (道具运用)**: 闪光、投掷、战术配合 - **Economy (经济管理)**: 性价比、经济局表现 - **Stability (稳定性)**: 波动、适应、抗压 #### **L3: 详细统计 (Detailed Stats)** - 按功能分组 ##### **Group 1: 枪法与交火 (Gunfight)** - 爆头率、爆头数 - 对枪胜率 - AWP击杀 - 补枪成功率 ##### **Group 2: 开局影响力 (Opening Impact)** - 首杀数/率 - 首死数/率 - 首接触时间 - 开局击杀时间 ##### **Group 3: 多杀表现 (Multi-Frag Performance)** - 2K/3K/4K/5K频率 - 多杀占比 ##### **Group 4: 残局能力 (Clutch Capability)** - 1v1/1v2/1v3/1v4/1v5胜率 - 残局尝试次数 ##### **Group 5: 特殊能力 (Special Stats)** - 穿墙/穿烟/致盲/盲狙击杀 - 刀杀/电击枪 - 无伤击杀/复仇击杀 - 高IQ评分 ##### **Group 6: 战术贡献 (Tactical Contribution)** - MVP次数 - 下包/拆包 - 闪光助攻 - 道具使用频率 - 道具伤害 ##### **Group 7: 经济管理 (Economy)** - 伤害性价比 - 经济局KD/KPR - 经济局频率 - 装备价值分布 ##### **Group 8: 节奏控制 (Pace & Timing)** - 前/中/后期击杀分布 - 前/中/后期死亡分布 - 平均存活时间 - 节奏风格标签(Early Aggressor/Late Closer) ##### **Group 9: 阵营偏好 (Side Preference)** - T/CT综合表现对比(Rating, KD, Win%) - T/CT关键指标对比(FK Rate, HS Rate) - 阵营风格分析 ##### **Group 10: 高压情境 (High-Pressure Performance)** - 赛点表现 - 逆风表现(落后3+回合) - 翻盘贡献 - 连败抗压 ##### **Group 11: 组排与分层 (Party & Stratification)** - 单排/双排/三排/四排/五排表现 - Carry/Normal/Sacrifice/Sleeping分布 - 对阵不同ELO段表现 ##### **Group 12: 回合细节 (Round Dynamics)** - 首死后胜率 - 无效死亡率 - 补枪响应率 - 武器使用偏好 - 回合类型表现 ### 3.2 指标优先级标记 为每个指标分配优先级,用于UI展示逻辑: | 优先级 | 说明 | 展示位置 | 指标数量 | |-------|------|---------|---------| | **P0 - Critical** | 核心KPI,必看指标 | Dashboard + 六维雷达 | 12个 | | **P1 - High** | 重要数据,影响战术决策 | Detailed Panel前置位置 | 30个 | | **P2 - Medium** | 辅助分析,深入了解 | Detailed Panel中部,可折叠 | 50个 | | **P3 - Low** | 小众指标,专业分析 | Advanced Section,默认折叠 | 30个 | ### 3.3 命名规范 #### 3.3.1 L3列名规范 ``` {category}_{metric}_{aggregation}_{context} ``` - **category**: 维度前缀(cbt, opn, clu, uti, eco, stb) - **metric**: 指标名称(小写蛇形) - **aggregation**: avg/sum/rate/pct (可选) - **context**: _t/_ct/_pistol等上下文(可选) 示例: - `cbt_hs_rate` (Combat - Headshot Rate) - `opn_fk_avg` (Opening - First Kills Average) - `clu_1v3_win_rate` (Clutch - 1v3 Win Rate) - `side_rating_avg_t` (Side - Rating Average T-side) #### 3.3.2 UI标签规范 ``` {中文简称} ({英文缩写/全称}) ``` 示例: - `爆头率 (HS%)` - `首杀数 (FK)` - `经济局KD (Eco KD)` ### 3.4 UI展示逻辑 #### 3.4.1 折叠分组 ```html
🎯 枪法与交火 (Gunfight)
🚀 开局影响力 (Opening Impact)
🔥 多杀表现 (Multi-Frag)
``` #### 3.4.2 渐进式披露 - **首屏**: P0指标(Dashboard + Radar) - **第一次滚动**: P1指标(Gunfight, Opening, Clutch) - **展开折叠**: P2/P3指标 - **Tooltip/Hover**: 指标说明、计算公式 --- ## 4. Schema优化建议 ### 4.1 L3表结构调整 #### 4.1.1 增加元数据列 ```sql ALTER TABLE dm_player_features ADD COLUMN data_version TEXT DEFAULT 'v2.0'; ALTER TABLE dm_player_features ADD COLUMN last_calculated_at TIMESTAMP; ALTER TABLE dm_player_features ADD COLUMN data_quality_score REAL; -- 0-1, 数据完整度 ``` #### 4.1.2 列名重构映射表 | 旧列名 | 新列名 | 说明 | |-------|--------|------| | `basic_avg_rating` | `core_rating_avg` | 核心指标 | | `basic_avg_kd` | `core_kd_avg` | 核心指标 | | `basic_avg_headshot_kills` | `cbt_hs_kills_avg` | 战斗-爆头 | | `basic_headshot_rate` | `cbt_hs_rate` | 战斗-爆头率 | | `basic_avg_first_kill` | `opn_fk_avg` | 开局-首杀 | | `basic_first_kill_rate` | `opn_fk_rate` | 开局-首杀率 | | `hps_clutch_win_rate_1v1` | `clu_1v1_win_rate` | 残局-1v1 | | `util_avg_nade_dmg` | `uti_nade_dmg_avg` | 道具-雷火伤 | | `eco_avg_damage_per_1k` | `eco_dmg_per_1k` | 经济-性价比 | | `pace_avg_time_to_first_contact` | `pce_first_contact_time` | 节奏-首接触 | | `special_wallbang_kills` | `spc_wallbang_kills` | 特殊-穿墙 | | `timing_early_kills` | `timg_kills_early` | 时机-前期击杀 | | `side_rating_t` | `side_rating_avg_t` | 阵营-T侧评分 | #### 4.1.3 新增计算字段 ```sql -- 添加派生指标 ALTER TABLE dm_player_features ADD COLUMN cbt_firefight_success_rate REAL; -- 计算: (FK + TradeKills) / (FK + FD + TradeAttempts) ALTER TABLE dm_player_features ADD COLUMN opn_impact_score REAL; -- 计算: FK_rate * 2 + (1 - FD_rate) * 1.5 + Opening_Kill_Time_factor ALTER TABLE dm_player_features ADD COLUMN clu_consistency_score REAL; -- 计算: 残局胜率方差(越小越稳定) ALTER TABLE dm_player_features ADD COLUMN eco_efficiency_tier TEXT; -- 分级: S(>150dmg/$1k), A(120-150), B(90-120), C(<90) ``` ### 4.2 L2表优化 #### 4.2.1 索引优化 ```sql -- 为高频查询字段添加索引 CREATE INDEX idx_match_players_rating ON fact_match_players(rating); CREATE INDEX idx_match_players_steam_time ON fact_match_players(steam_id_64, match_id); CREATE INDEX idx_round_events_time ON fact_round_events(match_id, round_num, event_time); CREATE INDEX idx_round_events_attacker ON fact_round_events(attacker_steam_id, event_type); ``` #### 4.2.2 物化视图(如支持) ```sql -- 预计算常用聚合 CREATE MATERIALIZED VIEW mv_player_basic_stats AS SELECT steam_id_64, COUNT(*) as total_matches, AVG(rating) as avg_rating, AVG(kd_ratio) as avg_kd, AVG(adr) as avg_adr, AVG(kast) as avg_kast FROM fact_match_players GROUP BY steam_id_64; REFRESH MATERIALIZED VIEW mv_player_basic_stats; -- 定期刷新 ``` ### 4.3 数据类型标准化 | 指标类型 | 存储类型 | 范围 | 前端展示 | |---------|---------|------|---------| | Rate/Percentage | REAL | 0.0 - 1.0 | `{:.1%}` (格式化为百分比) | | Score (0-100) | REAL | 0.0 - 100.0 | `{:.1f}` | | Count | INTEGER | 0+ | `{:.0f}` | | Average Count | REAL | 0.0+ | `{:.2f}` | | Time (seconds) | REAL | 0.0+ | `{:.1f}s` | | Ratio | REAL | 0.0+ | `{:.2f}` | ### 4.4 JSON字段拆解 #### 4.4.1 武器统计拆表 ```sql CREATE TABLE IF NOT EXISTS dm_player_weapon_stats ( steam_id_64 TEXT, weapon TEXT, kills INTEGER, hs_rate REAL, share REAL, kpm REAL, -- Kills per match price INTEGER, category TEXT, PRIMARY KEY (steam_id_64, weapon), FOREIGN KEY (steam_id_64) REFERENCES dm_player_features(steam_id_64) ); ``` #### 4.4.2 回合类型表现拆表 ```sql CREATE TABLE IF NOT EXISTS dm_player_round_type_stats ( steam_id_64 TEXT, round_type TEXT CHECK(round_type IN ('pistol', 'eco', 'rifle', 'fullbuy', 'overtime')), kpr REAL, perf REAL, rounds_played INTEGER, PRIMARY KEY (steam_id_64, round_type), FOREIGN KEY (steam_id_64) REFERENCES dm_player_features(steam_id_64) ); ``` --- ## 5. 实施计划 ### 5.1 阶段一:数据清理与验证 (Week 1) #### 任务清单 - [ ] 审查L3表所有122列,标记冗余/错误/缺失列 - [ ] 验证计算逻辑正确性(抽样10名玩家,手工核对) - [ ] 统计各指标数据覆盖率(非NULL比例) - [ ] 生成数据质量报告 #### 输出物 - `data_quality_report.csv`: 各列的覆盖率、异常值比例 - `calculation_verification.md`: 10个样本的计算验证结果 ### 5.2 阶段二:Schema重构 (Week 2) #### 任务清单 - [ ] 创建新L3表 `dm_player_features_v2` (保留旧表作为备份) - [ ] 编写迁移脚本 `migrate_l3_v1_to_v2.py` - [ ] 执行列名重命名、类型标准化 - [ ] 添加元数据列 (data_version, data_quality_score) - [ ] 创建武器统计、回合类型拆表 - [ ] 建立索引 #### 输出物 - `schema_v2.sql`: 新表结构DDL - `migration_script.py`: 数据迁移脚本 - `rollback_plan.md`: 回滚方案 ### 5.3 阶段三:特征服务重构 (Week 3) #### 任务清单 - [ ] 更新 `feature_service.py` 中的列名映射 - [ ] 重构 `_load_and_calculate_dataframe` 函数 - [ ] 实现新的指标优先级系统 (P0/P1/P2/P3) - [ ] 添加数据质量检查逻辑 - [ ] 更新 `get_roster_features_distribution` 支持新字段 - [ ] 单元测试覆盖率达到80% #### 输出物 - `feature_service_v2.py`: 重构后的特征服务 - `test_feature_service.py`: 完整测试套件 - `api_changelog.md`: API变更日志 ### 5.4 阶段四:前端模板重构 (Week 4) #### 任务清单 - [ ] 重构 `profile.html`,实现新的分组结构 - [ ] 实现折叠/展开交互组件 - [ ] 更新所有UI标签,统一中英文格式 - [ ] 实现渐进式披露逻辑 - [ ] 添加指标Tooltip说明 - [ ] 优化移动端响应式布局 - [ ] 性能优化(减少DOM节点,懒加载) #### 输出物 - `profile_v2.html`: 重构后的模板 - `components/stat_group.html`: 可复用的分组组件 - `ui_ux_guidelines.md`: 前端设计规范 ### 5.5 阶段五:数据迁移与上线 (Week 5) #### 任务清单 - [ ] 在测试环境执行完整迁移流程 - [ ] 对比新旧版本数据一致性 - [ ] 性能压测(查询速度、页面加载时间) - [ ] 灰度发布(10% -> 50% -> 100%) - [ ] 监控错误日志、用户反馈 - [ ] 更新文档和Wiki #### 输出物 - `migration_report.md`: 迁移执行报告 - `performance_benchmark.md`: 性能对比数据 - `user_guide_v2.md`: 用户使用指南 ### 5.6 阶段六:持续优化 (Ongoing) #### 任务清单 - [ ] 收集用户反馈,迭代UI/UX - [ ] 监控数据质量,自动告警 - [ ] 定期review指标有效性 - [ ] 探索新维度特征(e.g. 位置热力图、协同指标) - [ ] A/B测试不同展示方案 --- ## 6. 关键指标重点说明 ### 6.1 核心KPI (P0级别) #### 1. Rating (综合评分) - **计算**: 5E平台官方Rating算法(加权K/D/ADR/RWS/多杀等) - **意义**: 单场比赛综合表现的标准化评分 - **L2来源**: `fact_match_players.rating` - **展示**: Dashboard大卡片 + 趋势图 #### 2. K/D Ratio (击杀死亡比) - **计算**: `总击杀 / 总死亡` - **意义**: 击杀效率的直观体现 - **展示**: Dashboard + 详细面板 + 阵营对比 #### 3. ADR (Average Damage per Round) - **计算**: `总伤害 / 总回合数` - **意义**: 每回合伤害输出,比K/D更稳定 - **展示**: Dashboard + 详细面板 #### 4. KAST (Kill/Assist/Survive/Trade) - **计算**: `(击杀+助攻+存活+被交易) / 总回合数` - **意义**: 团队贡献率,衡量对回合胜利的参与度 - **展示**: Dashboard + 详细面板 ### 6.2 六维雷达说明 #### Combat (战斗力) - score_bat - **构成**: 25% Rating + 20% KD + 15% ADR + 10% DuelWin + 10% HighEloKD + 20% 3K - **含义**: 纯粹的枪法和对枪能力 - **高分特征**: 爆头率高、对枪胜率高、对高分段也能保持KD #### Opening (开局影响) - score_opn (建议新增) - **构成**: 30% FK_rate + 25% FK_avg + 20% (100-FirstContactTime) + 25% OpeningKillTime - **含义**: 开局阶段的主动性和影响力 - **高分特征**: 首杀率高、首接触时间早、首杀发生时间早 #### Clutch (残局能力) - score_hps - **构成**: 25% 1v3+ + 20% MatchPtWin + 20% ComebackKD + 15% PressureEntry + 20% Rating - **含义**: 高压情境下的表现 - **高分特征**: 残局胜率高、赛点稳定、逆风能C #### Utility (道具运用) - score_util - **构成**: 35% UsageRate + 25% NadeDmg + 20% FlashTime + 20% FlashEnemy - **含义**: 道具使用的频率和效果 - **高分特征**: 道具使用频繁、闪光效果好、雷火伤害高 #### Economy (经济管理) - score_eco - **构成**: 50% Dmg/$1k + 50% EcoKPR - **含义**: 经济利用效率 - **高分特征**: 用少量装备打出高伤害、经济局也能发挥 #### Stability (稳定性) - score_sta - **构成**: 30% (100-Volatility) + 30% LossRating + 20% WinRating + 10% TimeCorr - **含义**: 表现的一致性和抗压能力 - **高分特征**: 波动小、输赢都能保持水平、耐久战 ### 6.3 重点推荐指标 #### 交火补枪率 (Firefight Follow-up Rate) - **计算**: `队友死后10秒内击杀对手的次数 / 队友阵亡次数` - **意义**: 衡量战术协同和补枪意识 - **重要性**: ★★★★★ (团队配合的核心指标) - **优化**: 当前是单独计算,建议整合到`pace_trade_kill_rate` #### 高IQ评分 (High IQ Score) - **计算**: 加权(穿墙*3 + 穿烟*2 + 致盲*1.5 + 盲狙*2) / 预期最大值 * 100 - **意义**: 战术智商和非常规击杀能力 - **重要性**: ★★★★☆ (差异化指标,展现个人特色) - **展示**: 特殊击杀Section,>50分显示徽章 #### 前期进攻率 (Early Aggression Rate) - **计算**: `前30秒击杀 / 总击杀` - **意义**: 打法风格标签(Aggressive vs Passive) - **重要性**: ★★★★☆ (风格识别) - **展示**: 时机分析Section + 风格徽章(>40%显示"Early Aggressor") #### 无效死亡率 (Invalid Death Rate) - **计算**: `(0击杀且0闪光助攻的死亡回合) / 总死亡回合` - **意义**: 团队负担指标,死得没价值 - **重要性**: ★★★★☆ (负面指标,需要改进) - **展示**: 回合动态Section,高于30%需警示 #### 赛点放大器 (Match Point KPR Ratio) - **计算**: `赛点回合KPR / 普通回合KPR` - **意义**: 关键时刻的心理素质 - **重要性**: ★★★★☆ (大心脏指标) - **展示**: 高压情境Section,>1.2显示"Clutch Gene"徽章 --- ## 7. 命名规范速查表 ### 7.1 维度前缀 | 前缀 | 全称 | 中文 | 适用场景 | |-----|------|------|----------| | `core_` | Core | 核心 | Dashboard 4大指标 | | `cbt_` | Combat | 战斗 | 枪法、对枪相关 | | `opn_` | Opening | 开局 | 首杀、首死、前期节奏 | | `clu_` | Clutch | 残局 | 1vX、残局胜率 | | `uti_` | Utility | 道具 | 闪光、投掷、烟雾 | | `eco_` | Economy | 经济 | 装备价值、经济局表现 | | `stb_` | Stability | 稳定 | 波动、一致性 | | `pce_` | Pace | 节奏 | 时间相关、进攻速度 | | `spc_` | Special | 特殊 | 穿墙、穿烟、盲狙等 | | `timg_` | Timing | 时机 | 回合阶段分布 | | `side_` | Side | 阵营 | T/CT对比 | | `pty_` | Party | 组排 | 单排、双排等 | | `rd_` | Round | 回合 | 回合级别动态 | ### 7.2 聚合函数后缀 | 后缀 | 含义 | 示例 | |-----|------|------| | `_avg` | Average | `cbt_hs_kills_avg` (平均爆头数) | | `_sum` | Sum | `opn_fk_sum` (总首杀数) | | `_rate` | Rate (0-1) | `cbt_hs_rate` (爆头率) | | `_pct` | Percentage (0-100) | 不推荐,统一用rate | | `_cnt` | Count | `clu_1v3_cnt` (1v3次数) | | `_ratio` | Ratio | `eco_dmg_per_1k` (性价比) | | `_score` | Score (0-100) | `spc_high_iq_score` (IQ评分) | | `_time` | Time (seconds) | `pce_first_contact_time` (首接触时间) | ### 7.3 上下文后缀 | 后缀 | 含义 | 示例 | |-----|------|------| | `_t` | T-side | `side_rating_avg_t` | | `_ct` | CT-side | `side_kd_avg_ct` | | `_pistol` | Pistol Round | `opn_fk_rate_pistol` | | `_eco` | Eco Round | `eco_kd_avg` | | `_early` | Early (0-30s) | `timg_kills_early` | | `_mid` | Mid (30-60s) | `timg_kills_mid` | | `_late` | Late (60s+) | `timg_kills_late` | | `_solo` | Solo Queue | `pty_rating_avg_solo` | | `_duo` | Duo Queue | `pty_win_rate_duo` | --- ## 8. 数据验证清单 ### 8.1 逻辑一致性检查 | 检查项 | 公式 | 预期结果 | |-------|------|----------| | FK + FD 占比 | `opn_fk_rate + opn_fd_rate` | ≈ 1.0 (允许±5%误差) | | 回合阶段完整性 | `timg_kills_early + timg_kills_mid + timg_kills_late` | = `total_kills` | | 阵营数据对称性 | `side_rounds_t + side_rounds_ct` | ≈ `total_rounds` (考虑加时) | | 残局尝试>=成功 | `clu_1v1_attempts` | >= `clu_1v1_wins` | | Rating分布完整 | `rating_dist_carry + normal + sacrifice + sleeping` | = 1.0 | ### 8.2 数值范围检查 | 字段 | 最小值 | 最大值 | 异常阈值 | |-----|-------|--------|----------| | `core_rating_avg` | 0.0 | 3.0 | >2.5罕见 | | `core_kd_avg` | 0.0 | 5.0 | >3.0罕见 | | `cbt_hs_rate` | 0.0 | 1.0 | >0.8异常 | | `opn_fk_rate` | 0.0 | 1.0 | <0.2或>0.8罕见 | | `clu_1v3_win_rate` | 0.0 | 1.0 | >0.5罕见 | | `pce_first_contact_time` | 0.0 | 115.0 | >100s异常 | ### 8.3 数据覆盖率检查 | 字段类别 | 预期覆盖率 | 说明 | |---------|-----------|------| | Core指标 | >99% | 基础数据,几乎所有玩家都有 | | Combat指标 | >95% | 除非样本太少 | | Special Kills | >50% | 不是所有人都有穿墙击杀 | | Economy指标 | >70% | 依赖Leetify数据,部分缺失 | | Timing指标 | >90% | 依赖event_time,新数据完整 | --- ## 9. FAQ ### Q1: 为什么要重组?现有结构有什么问题? **A**: 当前主要问题: 1. **命名混乱**:前缀不统一(`basic_`/`side_`/`rd_`等),难以维护 2. **数据冗余**:同类指标分散在多个Section,用户查找困难 3. **缺乏层次**:120+指标平铺,核心数据不突出 4. **UI拥挤**:信息密度过高,用户认知负担重 ### Q2: 重组后会丢失数据吗? **A**: 不会。我们采用**增量迁移**策略: 1. 创建新表`dm_player_features_v2`,保留旧表 2. 双写一段时间,确保数据一致 3. 灰度切换,可随时回滚 4. 旧表保留3个月作为备份 ### Q3: 新分类体系的依据是什么? **A**: 基于**游戏功能维度**和**用户关注度**: 1. **功能维度**:枪法、开局、残局、道具、经济、节奏等游戏概念 2. **用户关注度**:通过热力图和用户反馈,确定P0/P1/P2/P3优先级 3. **专业意见**:参考职业教练和数据分析师的建议 ### Q4: 重组会影响现有功能吗? **A**: 短期影响最小化: 1. **后端兼容**:`feature_service.py`会提供新旧API同时支持 2. **前端渐进**:先发布新UI,保留旧版入口,收集反馈后完全切换 3. **数据一致**:新旧两套数据会持续对比验证 ### Q5: 如何衡量重组效果? **A**: 关键指标: 1. **用户体验**:页面停留时间、交互深度、反馈评分 2. **性能**:页面加载时间(<2s)、查询速度(<500ms) 3. **数据质量**:覆盖率(>90%)、异常率(<1%) 4. **开发效率**:新增指标开发时间、Bug数量 ### Q6: 我能提供反馈吗? **A**: 当然!反馈渠道: 1. **GitHub Issue**:提交功能建议或Bug报告 2. **Wiki评论区**:讨论数据定义和展示逻辑 3. **内部群组**:实时讨论和快速响应 --- ## 10. 附录 ### 10.1 完整列名映射表 (前50个) | 旧列名 | 新列名 | 优先级 | 分组 | |-------|--------|-------|------| | basic_avg_rating | core_rating_avg | P0 | Core Dashboard | | basic_avg_kd | core_kd_avg | P0 | Core Dashboard | | basic_avg_adr | core_adr_avg | P0 | Core Dashboard | | basic_avg_kast | core_kast_avg | P0 | Core Dashboard | | basic_avg_headshot_kills | cbt_hs_kills_avg | P1 | Gunfight | | basic_headshot_rate | cbt_hs_rate | P1 | Gunfight | | basic_avg_awp_kill | cbt_awp_kills_avg | P2 | Gunfight | | basic_avg_assisted_kill | cbt_assists_avg | P1 | Gunfight | | basic_avg_first_kill | opn_fk_avg | P1 | Opening Impact | | basic_avg_first_death | opn_fd_avg | P2 | Opening Impact | | basic_first_kill_rate | opn_fk_rate | P1 | Opening Impact | | basic_first_death_rate | opn_fd_rate | P2 | Opening Impact | | basic_avg_kill_2 | cbt_2k_avg | P2 | Multi-Frag | | basic_avg_kill_3 | cbt_3k_avg | P1 | Multi-Frag | | basic_avg_kill_4 | cbt_4k_avg | P2 | Multi-Frag | | basic_avg_kill_5 | cbt_5k_avg | P2 | Multi-Frag | | hps_clutch_win_rate_1v1 | clu_1v1_win_rate | P1 | Clutch | | hps_clutch_win_rate_1v3_plus | clu_1v3_plus_avg | P1 | Clutch | | util_avg_nade_dmg | uti_nade_dmg_avg | P1 | Utility | | util_avg_flash_time | uti_flash_time_avg | P2 | Utility | | util_usage_rate | uti_usage_rate | P1 | Utility | | eco_avg_damage_per_1k | eco_dmg_per_1k | P1 | Economy | | eco_rating_eco_rounds | eco_kpr_eco | P1 | Economy | | pace_avg_time_to_first_contact | pce_first_contact_time | P1 | Pace | | pace_trade_kill_rate | pce_trade_kill_rate | P1 | Pace | | special_wallbang_kills | spc_wallbang_kills | P2 | Special | | special_high_iq_score | spc_iq_score | P1 | Special | | timing_early_kills | timg_kills_early | P2 | Timing | | timing_early_aggression_rate | timg_aggression_rate | P1 | Timing | | side_rating_t | side_rating_avg_t | P1 | Side | | side_rating_ct | side_rating_avg_ct | P1 | Side | | party_1_win_rate | pty_solo_win_rate | P2 | Party | | party_5_win_rate | pty_full_win_rate | P2 | Party | | rating_dist_carry_rate | perf_carry_rate | P2 | Stratification | | elo_gt2000_rating | perf_vs_elo_2000_plus | P2 | Stratification | *(完整映射表见附件Excel)* ### 10.2 参考资料 - **FeatureRDD.md**: 特征维度详细设计文档 - **profile_data_analysis.md**: 现有Profile数据分析报告 - **6D_README.md**: 六维能力模型说明 - **L2 Schema**: `database/L2/schema.sql` - **L3 Schema**: `database/L3/schema.sql` - **Feature Service**: `web/services/feature_service.py` - **Profile Template**: `web/templates/players/profile.html` ### 10.3 术语表 | 术语 | 英文 | 解释 | |-----|------|------| | 评分 | Rating | 5E平台综合评分,加权多项指标 | | 击杀比 | K/D Ratio | Kills / Deaths | | 场均伤害 | ADR | Average Damage per Round | | 贡献率 | KAST | Kill, Assist, Survive, Trade 参与率 | | 首杀 | First Kill (FK) | 回合第一个击杀 | | 首死 | First Death (FD) | 回合第一个死亡 | | 残局 | Clutch | 1vX情境 | | 经济局 | Eco Round | 装备价值<$2000的回合 | | 长枪局 | Fullbuy | 装备价值≥$4000的回合 | | 穿墙 | Wallbang | 透过墙体击杀 | | 穿烟 | Through Smoke | 透过烟雾击杀 | | 盲狙 | NoScope | AWP不开镜击杀 | | 补枪 | Trade Kill | 队友死后5秒内击杀对手 | | 无效死亡 | Invalid Death | 死亡时0击杀0助攻 | | 赛点 | Match Point | 一方达到12分或15分 | --- ## 结论 本文档提供了YRTV玩家档案系统的**完整数据清单**(122个指标)、**当前问题分析**(命名、冗余、分类、Schema)、**重组方案**(新分类体系、命名规范、UI逻辑)、**Schema优化建议**(列名重构、索引、拆表)以及**详细实施计划**(6个阶段)。 ### 核心价值 1. **降低维护成本**:统一命名规范,减少50%的代码注释需求 2. **提升用户体验**:分组折叠,减少认知负担,提高30%的数据查找效率 3. **增强可扩展性**:优先级系统,新增指标有明确归类标准 4. **保障数据质量**:验证清单,自动化检查,异常率控制在1%以下 ### 下一步行动 1. **评审会议**:召集开发、产品、数据团队,评审本方案 2. **任务分配**:根据阶段计划,分配到具体开发人员 3. **原型设计**:产品经理产出新UI原型,供前端参考 4. **启动实施**:从阶段一开始,按周迭代 --- **文档版本**: v1.0 **最后更新**: 2026-01-28 **作者**: AI Assistant + YRTV Team **联系方式**: [项目Wiki](内部链接) --- *本文档持续更新,欢迎贡献!*