Модуль: Логистическая регрессия


3. Определить успешность трека

Ты — data scientist в музыкальной компании! Твоя задача — понять, станет ли новая песня хитом, ещё до её релиза. У тебя есть реальный датасет из Spotify с характеристиками тысяч песен.

Сможешь ли ты создать модель, которая предскажет, попадёт ли трек в топ? 🔥

Данные

В датасете есть интересные музыкальные характеристики:

  • danceability — танцевальность (0.0-1.0) — насколько под это можно двигаться
  • energy — энергичность (0.0-1.0) — насколько трек агрессивный и быстрый
  • loudness — громкость (в децибелах, обычно от -60 до 0)
  • speechiness — разговорность (0.0-1.0) — сколько в треке слов (рэп будет высоким)
  • acousticness — акустичность (0.0-1.0) — есть ли живые инструменты
  • instrumentalness — инструментальность (0.0-1.0) — есть ли вокал (чем выше, тем меньше слов)
  • liveness — живость (0.0-1.0) — записано ли вживую с публикой
  • valence — позитивность (0.0-1.0) — насколько трек весёлый (грустный vs радостный)
  • tempo — темп (удары в минуту, обычно 50-200)
  • duration_ms — длительность в миллисекундах
  • target — хит (1) или нет (0)

Напиши программу, которая:

  1. Загружает датасет
  2. Готовит данные
  3. Обучает модель логистической регрессии
  4. Определяет успешность заданного трека

Вставьте недостающие фрагменты кода
Python
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import numpy as np

# Загрузка датасета
data = pd.read_csv("dataset-of-10s.csv")


# Шаг 1: Выбери признаки для модели
features = ['danceability', 'energy', 'loudness', 'speechiness',
            'acousticness', 'instrumentalness', 'liveness',
            'valence', 'tempo', 'duration_ms']           
# Шаг 2: Раздели на train и test
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)       

new_track = pd.DataFrame([[
    0.8,      # danceability
    0.7,      # energy
    -5,       # loudness
    0.05,     # speechiness
    0.1,      # acousticness
    0.3,      # instrumentalness
    0.2,      # liveness
    0.9,      # valence
    128,      # tempo
    210000    # duration_ms
]], columns=features)     
if prediction[0] == 1:
    print("ЭТО БУДЕТ ХИТ! ")
    print("Готовь Grammy! ")
else:
    print("К сожалению, хитом не станет...")