小乐数据

神经网络(RNN)预测走地角球数以及角球玩法计算公式

原创  数据分析 2024年08月14日 15:07:08 cs 1评论 475


@[TOC](文章目录)


---


# 前言



其实足球玩法很多,比如大小球、让球、半场、角球、胜平负、总进球数等等,只要你能想到的玩法,都可以玩,这里浅析足球角球的玩法,以及如果如何计算输赢。


---



# 一、角球的基本玩法与规则?


## 1.1 角球的判罚


### 1.1.1 角球的判罚球的整体越过球门线


球的整体,不论是在地面还是空中,必须越过球门线。如果仅仅是球的一部分越过球门线,则不会判罚角球。


### 1.1.2 最后触球者为守方队员


在球越过球门线之前,最后触球的球员必须是防守方(即非进攻方)的队员。


## 1.2 角球执行流程

### 1.2.1 犯规行为


> 如果在球出底线前有犯规行为发生,裁判员需要先处理犯规行为,然后再考虑是否判罚角球。如果犯规行为足以影响比赛结果或球员安全,裁判员可能会直接判罚其他类型的犯规(如点球、任意球等),而非角球。


### 1.2.2 角球执行方式:


> 判罚角球后,进攻方球员需在角球弧内(通常位于足球场底线和边线的交叉点处,半径为1米)将球开出。角球开出前,防守方球员必须退到距角球区一定距离(通常为9.15米或10码)之外。


### 1.2.3  直接得分


> 角球是可以直接射门得分的,尽管由于角度和距离的限制,直接得分的难度较大。历史上曾有球员(如贝克汉姆)通过角球直接射门得分的情况。


## 1.3 角球玩法


> 这里主要介绍角球大小球的玩法。

> **最主要还是得根据比赛开的盘口来决定**


**了解规则:** 首先,你需要明确角球大小球的定义。一般来说,“大”角球意味着比赛中角球的数量超过预设的阈值,而“小”角球则意味着角球数量未达到该阈值。这个阈值会根据不同的比赛和投注平台而有所不同。

**分析比赛:** 在投注前,你需要对比赛进行分析。考虑双方球队的实力、战术风格、球员状态以及过往比赛中的角球数据。这些因素都可能影响比赛中角球的数量。

**做出判断:** 基于你的分析,判断比赛中角球数量可能会超过还是低于预设的阈值。如果你认为角球数量会较多,可以选择“大”角球;如果认为角球数量会较少,可以选择“小”角球。


# 二、角球计算公式

## 1.示例一【全赢】

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/898eb04479964bb1a6f089b674823d3f.png)

计算公式

> 如这场荷甲的阿贾克斯VS海伦芬,开的盘口是7.5,这里觉得全场角球书不可能超过这个值,所以就推出是全场角球小球,反之,如果觉得大于这个值,那么就是全场角球大球,最终结果是5-2,也就是主队有5个角球,客队有2个角球,总数7个角球小于7.5,那么就是全赢。



## 2.示例二【走水】

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4daa385828d44843a456cad1f4ac041e.png)

计算说明

> 比如这场瑞士超中塞尔维特VS巴塞尔,开出来的盘口是16,结果是主队11个角球,客队5个角球,加起来刚好等于16,所以这场就是不赚不亏,本金退回。


## 3.示例三【全输】

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/322110b757e74110b90dcfb719cda29d.png)

计算说明

> 比如这场阿乙联赛中,埃斯卡拉达VS查卡里塔青年,开出8.5的盘口,最终是9个盘口,期望的是小球(小于),所以就全输。


## 4.盘口转换


> 有些盘口是有5.5/6,需要转换的可以参考以下这个方法。


```python

    def change_pk(self, odds):

        # print('初始odds', odds)

        self.logger.info('初始odds' + odds + '类型:' + self.byName)

        byName = self.byName.replace('上半场-', '')

        result = 0.00

        if '大/小' in byName:

            odds = odds.replace('+', '').replace('-', '').replace('+', '').replace('-', '').replace('+', '').replace(

                '-', '')

            result = odds.replace('(', '').replace(')', '').replace(',', '/')

        if byName == '让球':

            odds = odds.replace('(', '').replace(')', '').replace(',', '/')

            result = odds

            if '/' in odds:

                odds = odds.split('/')[1]

                if '-' in odds:

                    result = float(odds) + 0.25  # -1 + 0.25

                if '+' in odds:

                    result = float(odds) - 0.25  # 3-0.25

                    result = '+' + str(result)

                if '0' == str(result):

                    result = str(result).replace('+', '').replace('-', '')

        self.logger.info('转换后odds' + str(result))

        if str(result) == '0.0':

            result = 0

        return str(result)

```


# 3. 大模型推导角球数


> 这里采用循环神经网络(RNN)

> 技术栈:Python的TensorFlow和Keras库


##  3.1 数据收集


> 需要一个包含足球比赛数据的数据集,至少包含每场比赛的角球数以及可能影响角球数的其他特征(如球队实力、天气、球场类型等)。这里我们假设数据已经以CSV格式存在,并且包含每场比赛的ID、两支球队、比赛结果(包括角球数)等信息。



## 3.2 数据预处理


 ### 1. 加载数据。 

 ### 2. 清洗和预处理数据(如处理缺失值、编码分类变量等)。

 ###  3.  将数据转换为RNN可以处理的格式(通常是序列形式)。

 


```javascript

import tensorflow as tf

from tensorflow.keras.datasets import mnist

from tensorflow.keras.utils import to_categorical


# 加载数据集

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()


# 数据预处理

train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255

test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255

train_labels = to_categorical(train_labels)

test_labels = to_categorical(test_labels)

```



## 3.3 模型设计


## 3.4 训练模型


```javascript

from tensorflow.keras import layers, models


# 构建神经网络模型

model = models.Sequential()

model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.add(layers.Flatten())

model.add(layers.Dense(64, activation='relu'))

model.add(layers.Dense(10, activation='softmax'))

```


## 3.5 预测


```javascript

# 编译模型

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])


# 训练模型

model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_data=(test_images, test_labels))

```


## 3.6 部分代码实现

```python

import numpy as np  

import pandas as pd  

from tensorflow.keras.models import Sequential  

from tensorflow.keras.layers import LSTM, Dense, TimeDistributed  

from sklearn.model_selection import train_test_split  

from sklearn.preprocessing import StandardScaler  

  

# 假设数据已经加载到DataFrame中  

# data = pd.read_csv('football_matches.csv')  

  

# 假设数据预处理已经完成,并转换为X_train, y_train, X_test, y_test  

# 这里我们模拟一些数据  

np.random.seed(0)  

X_train = np.random.random((100, 10, 5))  # 100个样本,每个样本10个时间步,每个时间步5个特征  

y_train = np.random.randint(0, 10, (100, 1))  # 假设角球数在0到9之间  

  

# 构建模型  

model = Sequential([  

    LSTM(50, return_sequences=False, input_shape=(10, 5)),  

    Dense(1)  

])  

  

model.compile(optimizer='adam', loss='mean_squared_error')  

  

# 训练模型  

model.fit(X_train, y_train, epochs=10, batch_size=32)  

  

# 预测(假设X_new是新数据)  

X_new = np.random.random((1, 10, 5))  

predictions = model.predict(X_new)  

print("Predicted corner kicks:", predictions.flatten()[0])

```


# 总结

角球玩法还是比较简单,但是想赢还是的下一番功夫,比如从多个维度去考虑,危险进攻数、射正数、射门数、控球率、失球率等等,所以依靠AI加持,动态分析滚球数据,方能在瞬息万变的比赛,找到最合适的机会,因为比较少赢半的,所以胜率超过60%,其实已经可以了。


参考博客:[https://blog.csdn.net/qq_38880880/article/details/138026873](https://blog.csdn.net/qq_38880880/article/details/138026873)


抱歉,评论功能已关闭!

选择主题