# -*- 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}")