根据php项目,传球成功率与胜率相关性?

wen PHP项目 4

传球成功率与胜率的相关性分析(PHP 实现)

足球数据分析中的经典结论

在足球数据分析领域,传球成功率(Pass Accuracy)与胜率的相关性是"弱正相关",大约在 r = 0.2 ~ 0.4 之间,具体取决于联赛和球队风格。

根据php项目,传球成功率与胜率相关性?

关键认知:

  • ✅ 传球成功率高 ≠ 一定赢球(巴萨式控球不一定赢)
  • ✅ 传球成功率是过程指标,胜率是结果指标
  • ✅ 强队往往传球成功率高,但单纯堆传球成功率(回传、横传)与胜率无强相关
  • ⚠️ 真正与胜率强相关的传球指标是:进攻三区传球成功率、关键传球数、向前传球率

PHP 实现相关性分析

数据表结构(MySQL)

CREATE TABLE team_match_stats (
    id INT PRIMARY KEY AUTO_INCREMENT,
    team_name VARCHAR(50),
    match_date DATE,
    passes_total INT,          -- 总传球数
    passes_completed INT,      -- 成功传球数
    pass_accuracy DECIMAL(5,2),-- 传球成功率 %
    goals_for INT,
    goals_against INT,
    result ENUM('win','draw','loss')
);
CREATE TABLE team_season_summary (
    team_name VARCHAR(50) PRIMARY KEY,
    matches INT,
    wins INT,
    win_rate DECIMAL(5,2),      -- 胜率 %
    avg_pass_accuracy DECIMAL(5,2)
);

PHP 计算皮尔逊相关系数

<?php
/**
 * 计算皮尔逊相关系数 r
 * r ∈ [-1, 1],|r| 越大相关性越强
 */
function pearsonCorrelation(array $x, array $y): array
{
    $n = count($x);
    if ($n !== count($y) || $n < 2) {
        throw new InvalidArgumentException('数组长度不一致或样本过少');
    }
    $sumX  = array_sum($x);
    $sumY  = array_sum($y);
    $sumXY = 0;
    $sumX2 = 0;
    $sumY2 = 0;
    for ($i = 0; $i < $n; $i++) {
        $sumXY += $x[$i] * $y[$i];
        $sumX2 += $x[$i] * $x[$i];
        $sumY2 += $y[$i] * $y[$i];
    }
    $numerator   = $n * $sumXY - $sumX * $sumY;
    $denominator = sqrt(
        ($n * $sumX2 - $sumX ** 2) * ($n * $sumY2 - $sumY ** 2)
    );
    if ($denominator == 0) {
        return ['r' => 0, 'strength' => '无相关'];
    }
    $r = $numerator / $denominator;
    return [
        'r'        => round($r, 4),
        'strength' => interpretCorrelation($r)
    ];
}
function interpretCorrelation(float $r): string
{
    $abs = abs($r);
    if ($abs < 0.2)      return '极弱/无相关';
    if ($abs < 0.4)      return '弱相关';
    if ($abs < 0.6)      return '中等相关';
    if ($abs < 0.8)      return '强相关';
    return '极强相关';
}

从数据库读取并分析

<?php
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->query("
    SELECT avg_pass_accuracy, win_rate
    FROM team_season_summary
    WHERE matches >= 10
");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$passAccuracy = array_column($rows, 'avg_pass_accuracy');
$winRate      = array_column($rows, 'win_rate');
$result = pearsonCorrelation($passAccuracy, $winRate);
echo "样本数: " . count($rows) . PHP_EOL;
echo "相关系数 r = {$result['r']}" . PHP_EOL;
echo "相关强度: {$result['strength']}" . PHP_EOL;

典型输出示例:

样本数: 20
相关系数 r = 0.3621
相关强度: 弱相关

进阶:分区域传球成功率分析

function analyzeByZone(PDO $pdo): array
{
    // 攻击三区传球成功率 vs 胜率,r 会更高
    $sql = "
        SELECT 
            AVG(final_third_pass_acc) AS acc,
            AVG(win_rate) AS wr
        FROM team_advanced_stats
        GROUP BY team_name
    ";
    $rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    return pearsonCorrelation(
        array_column($rows, 'acc'),
        array_column($rows, 'wr')
    );
}

实测经验数据参考

指标 与胜率相关系数 r
总传球成功率 2 ~ 0.4(弱)
进攻三区传球成功率 4 ~ 0.6(中)
向前传球比率 4 ~ 0.5
关键传球 / 90分钟 5 ~ 0.7(强)
射正次数 6 ~ 0.8(强)
预期进球 xG 7 ~ 0.9(极强)

PHP 工程化建议

  1. 不要单看传球成功率:应组合多个指标做多元回归
  2. 用类封装分析逻辑:
class FootballCorrelationAnalyzer
{
    public function __construct(private PDO $pdo) {}
    public function analyze(string $metricField): array
    {
        $rows = $this->pdo->query(
            "SELECT {$metricField} AS m, win_rate AS w 
             FROM team_season_summary WHERE matches >= 10"
        )->fetchAll(PDO::FETCH_ASSOC);
        return pearsonCorrelation(
            array_column($rows, 'm'),
            array_column($rows, 'w')
        );
    }
}
  1. 大样本用 SQL 聚合(STDDEV_POP、AVG)先预处理,避免 PHP 内存压力
  2. 可结合 ML:PHP 调用 Python(shell_exec 或 gRPC)跑随机森林,明显优于皮尔逊

传球成功率与胜率呈弱正相关(r ≈ 0.2~0.4),不能作为单独预测胜率的指标。 若要提升预测力,应聚焦:进攻三区传球成功率 + 关键传球 + xG。

如果需要我给出完整可运行的 PHP 项目 demo(含 MySQL 建表 + 模拟数据生成 + 分析页),告诉我,我可以直接输出。

上一篇这个php项目显示人盯人防守成功率?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!