39 lines
1.8 KiB
Python
39 lines
1.8 KiB
Python
import pandas as pd
|
||
from sklearn.model_selection import train_test_split
|
||
from sklearn.tree import DecisionTreeClassifier
|
||
from sklearn.metrics import accuracy_score, classification_report
|
||
|
||
# Загрузка данных
|
||
data = pd.read_csv("train_bikes.csv", sep=',').dropna()
|
||
|
||
# Подготовка данных
|
||
# Здесь определяются пороги для категорий спроса
|
||
low_demand_threshold = 100 # Порог для "Низкого спроса"
|
||
medium_demand_threshold = 300 # Порог для "Среднего спроса"
|
||
|
||
# Создание новой категориальной переменной на основе порогов
|
||
data['demand_category'] = pd.cut(data['count'], bins=[0, low_demand_threshold, medium_demand_threshold, float('inf')],
|
||
labels=["Low Demand", "Medium Demand", "High Demand"])
|
||
|
||
# Выделение признаков и целевой переменной
|
||
X = data.drop(['count', 'demand_category', 'datetime'], axis=1) # Удаление ненужных столбцов
|
||
y = data['demand_category']
|
||
|
||
# Разделение данных на обучающий и тестовый наборы
|
||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
||
|
||
# Создание и обучение модели дерева решений
|
||
clf = DecisionTreeClassifier(random_state=42)
|
||
clf.fit(X_train, y_train)
|
||
|
||
# Предсказание категорий спроса на тестовом наборе
|
||
y_pred = clf.predict(X_test)
|
||
|
||
# Оценка качества модели
|
||
accuracy = accuracy_score(y_test, y_pred)
|
||
print(f"Accuracy: {accuracy:.2f}")
|
||
|
||
# Вывод отчета о классификации
|
||
report = classification_report(y_test, y_pred)
|
||
print(report)
|