0% acharam este documento útil (0 voto)
3 visualizações9 páginas

Previsão de Vencedor em CS:GO com ML

O documento descreve um projeto de Machine Learning para prever o time vencedor em partidas de CS:GO usando um dataset específico. O processo inclui importação de bibliotecas, tratamento de dados, análise visual, seleção de atributos, treinamento de um modelo RandomForestClassifier e avaliação de sua performance. O modelo é avaliado através de métricas como acurácia e F1-score, com visualizações adicionais para análise dos dados.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato RTF, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações9 páginas

Previsão de Vencedor em CS:GO com ML

O documento descreve um projeto de Machine Learning para prever o time vencedor em partidas de CS:GO usando um dataset específico. O processo inclui importação de bibliotecas, tratamento de dados, análise visual, seleção de atributos, treinamento de um modelo RandomForestClassifier e avaliação de sua performance. O modelo é avaliado através de métricas como acurácia e F1-score, com visualizações adicionais para análise dos dados.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato RTF, PDF, TXT ou leia on-line no Scribd

# -*- coding: utf-8 -*-

"""Cópia de atp

Automatically generated by Colab.

Original file is located at

[Link]

# ATP - Machine Learning com o dataset CS:GO

Aluno: Paulo henrique inocencio

Curso: Análise e Desenvolvimento de Sistemas

Disciplina: Técnicas de Machine Learning

Professor:Wellington

Data: 23/05/2025

Objetivo: Prever o time vencedor de uma rodada de CS:GO com base nos dados de desempenho usando
técnicas de Machine Learning.

## 1. Importação das Bibliotecas

"""

import pandas as pd

import numpy as np

import [Link] as plt

import seaborn as sns


from sklearn.model_selection import train_test_split

from [Link] import StandardScaler

from [Link] import RandomForestClassifier

from [Link] import Pipeline

from [Link] import classification_report, confusion_matrix, roc_auc_score, f1_score

"""## 2. Carregamento e Visualização Inicial dos Dados

"""

df = pd.read_csv("csgo_round_snapshots.csv")

[Link]()

"""## 3. Tratamento de Dados

"""

X = [Link]("round_winner", axis=1)
y = df["round_winner"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

"""## 4. Análise Visual

"""

[Link](figsize=(12, 5))

[Link](data=df[['ct_health', 't_health']])

[Link]('Boxplot de Vida dos Times')

[Link]()

"""## 5. Remoção de Outliers

"""

df_numeric = df.select_dtypes(include=[Link])

Q1 = df_numeric.quantile(0.25)

Q3 = df_numeric.quantile(0.75)

IQR = Q3 - Q1

df = df[~((df_numeric < (Q1 - 1.5 * IQR)) | (df_numeric > (Q3 + 1.5 * IQR))).any(axis=1)]
"""## 6. Seleção de Atributos

"""

y = df['round_winner']

X = [Link]('round_winner', axis=1)

X = X.select_dtypes(include=[Link])

"""## 7. Separação em Treinamento e Teste

"""

from sklearn.feature_selection import SelectKBest, f_classif

selector = SelectKBest(score_func=f_classif, k=10)

X_new = selector.fit_transform(X, y)

colunas_selecionadas = [Link][selector.get_support()]

X = X[colunas_selecionadas]

print("Atributos selecionados:", colunas_selecionadas.tolist())

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)


"""## 8. Treinamento do Modelo

"""

model = RandomForestClassifier(random_state=42)

[Link](X_train, y_train)

"""## 9. Avaliação do Modelo

"""

from [Link] import accuracy_score, confusion_matrix, classification_report

y_pred = [Link](X_test)

print("Acurácia:", accuracy_score(y_test, y_pred))

print(confusion_matrix(y_test, y_pred))

print(classification_report(y_test, y_pred))

[Link](confusion_matrix(y_test, y_pred), annot=True, fmt='d', cmap='Blues')

[Link]('Previsto')

[Link]('Real')

[Link]('Matriz de Confusão')

[Link]()
"""## Tipo de Problema

O problema é de **classificação**, pois o alvo `round_winner` representa categorias (CT ou TR).

## Seleção de Atributos

Foi utilizada a técnica **SelectKBest** com a função `f_classif`, selecionando os 10 atributos mais
relevantes.

## Treinamento do Modelo

O algoritmo escolhido foi o **RandomForestClassifier**, por sua boa performance em problemas de


classificação com muitos atributos.

## Avaliação

Utilizamos a acurácia, matriz de confusão e o relatório de classificação para avaliar a performance do


modelo.

## 10. Tratamento de Dados

Nesta etapa, removemos a coluna alvo (`round_winner`) do conjunto de atributos e separamos os dados
entre variáveis preditoras (`X`) e variável de saída (`y`).

Em seguida, dividimos os dados em conjuntos de treino e teste, utilizando 70% para treino e 30% para
teste, com `random_state=42` para garantir reprodutibilidade.

"""

# Separando variáveis

X = [Link]("round_winner", axis=1)

y = df["round_winner"]
# Dividindo em treino e teste

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(

X, y, test_size=0.3, random_state=42

"""Além do boxplot, também utilizei histogramas para visualizar a quantidade de jogadores vivos por
time em cada rodada. Essa análise permite identificar se há rodadas em que um time frequentemente
fica em desvantagem numérica.

"""

[Link](figsize=(10,5))

[Link](df['ct_players_alive'], kde=False, bins=6, color='blue', label='CT', stat='count')

[Link](df['t_players_alive'], kde=False, bins=6, color='red', label='T', stat='count')

[Link]('Distribuição de Jogadores Vivos por Time')

[Link]('Número de Jogadores Vivos')

[Link]()

[Link]()

# Substitui vírgula por ponto e converte para float nas colunas numéricas

for coluna in [Link]:

if df[coluna].dtype == 'object':

try:

df[coluna] = df[coluna].[Link](',', '.').astype(float)


except:

pass # Ignora colunas que não são numéricas

# Corrige valores com vírgula decimal e converte para float

for col in [Link]:

if df[col].dtype == 'object':

try:

df[col] = df[col].[Link](',', '.').astype(float)

except:

pass # ignora colunas que não puderem ser convertidas

# Verifica se ainda há colunas com strings

print("Colunas com tipo 'object':")

print([Link][[Link] == 'object'])

# Seleciona apenas colunas numéricas

df = df.select_dtypes(include=[[Link]])

from [Link] import Pipeline

from [Link] import StandardScaler

from sklearn.linear_model import LogisticRegression # exemplo

from [Link] import accuracy_score, f1_score

from sklearn.model_selection import train_test_split

# 1. Divisão
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Select only numeric columns for scaling and modeling

X_train_numeric = X_train.select_dtypes(include=[Link])

X_test_numeric = X_test.select_dtypes(include=[Link])

# 2. Pipeline

pipeline = Pipeline([

('scaler', StandardScaler()), # passo de preparação (exemplo)

('classifier', LogisticRegression()) # seu algoritmo de ML da parte I

])

# 3. Treinar pipeline

[Link](X_train_numeric, y_train)

# 4. Predição

y_pred = [Link](X_test_numeric)

# 5. Métricas

acc = accuracy_score(y_test, y_pred)

f1 = f1_score(y_test, y_pred, pos_label='CT') # Specify pos_label for f1_score with non-binary targets

print(f"Acurácia: {acc:.2f}")

print(f"F1-score: {f1:.2f}")

Você também pode gostar