96 KiB
import pandas as pd
phone = pd.read_csv("data/phone_price.csv", index_col="Id")
phone.info()
display(phone.shape)
phone.head()
car = pd.read_csv("data/car_price.csv")
car.info()
display(car.shape)
car.head()
house = pd.read_csv("data/house_data.csv")
house.info()
display(house.shape)
house.head()
Продажа домов
Цель: Определение рыночной стоимости домов для оптимизации ценовой политики.
Эффект: Улучшение конкурентоспособности на рынке недвижимости и увеличение объема продаж за счет правильного ценообразования. Возможность точного прогнозирования цен и повышения удовлетворенности клиентов.
Цены на автомобили
Цель: Оценка цен на автомобили в зависимости от различных факторов (например, пробег, марка, модель, год выпуска).
Эффект: Увеличение привлекательности предложения за счет адекватного ценообразования и минимизации убытков от продажи автомобилей. Позволяет более точно прогнозировать потребности клиентов и улучшить управление запасами.
Цены на мобильные устройства
Цель: Определение причин изменения цен на мобильные устройства и оценка влияния сезонных скидок на спрос.
Эффект: Оптимизация маркетинговых стратегий и акций, что может привести к увеличению объемов продаж. Улучшение прогнозирования спроса и управление ассортиментом на основе ценовых изменений.
Продажа домов
Цель технического проекта: Разработка системы оценки рыночной стоимости недвижимости на основе анализа данных о продажах.
Вход: Набор данных о прошедших продажах домов (цена, площадь, местоположение, количество комнат, год постройки и т.д.).
Целевой признак: Рыночная цена продажи домов.
Цены на автомобили
Цель технического проекта: Создание алгоритма, который предсказывает цены на автомобили с учетом различных характеристик и рыночных тенденций.
Вход: Данные о характеристиках автомобилей (марка, модель, год выпуска, пробег, состояние) и цены на аналогичные автомобили.
Целевой признак: Цена автомобиля.
Цены на мобильные устройства
Цель технического проекта: Разработка системы, анализирующей влияние маркетинговых акций на цены и спрос на мобильные устройства.
Вход: Данные о ценах на мобильные устройства (с учетом скидок), история продаж, информация о маркетинговых акциях и сезонные колебания.
Целевой признак: Объем продаж мобильных устройств.
# Количество пустых значений признаков
display(phone.isnull().sum())
display()
# Есть ли пустые значения признаков
display(phone.isnull().any())
display()
# Процент пустых значений признаков
for i in phone.columns:
null_rate = phone[i].isnull().sum() / len(phone) * 100
if null_rate > 0:
display(f"{i} процент пустых значений: %{null_rate:.2f}")
# Количество пустых значений признаков
display(car.isnull().sum())
display()
# Есть ли пустые значения признаков
display(car.isnull().any())
display()
# Процент пустых значений признаков
for i in car.columns:
null_rate = car[i].isnull().sum() / len(car) * 100
if null_rate > 0:
display(f"{i} процент пустых значений: %{null_rate:.2f}")
# Количество пустых значений признаков
display(house.isnull().sum())
display()
# Есть ли пустые значения признаков
display(house.isnull().any())
display()
# Процент пустых значений признаков
for i in house.columns:
null_rate = house[i].isnull().sum() / len(house) * 100
if null_rate > 0:
display(f"{i} процент пустых значений: %{null_rate:.2f}")
В 1 наборе данных phone имеются пустые значения, в остальных они отсутствуют. Заполним пустые значения из 1 датасета.
# Замена пустых данных на моду (часто встречающееся значение)
mode_Android = phone['Android_version'].mode()
phone.fillna({'Android_version':mode_Android}, inplace=True)
Inbuilt_memory = phone['Inbuilt_memory'].mode()
phone.fillna({'Inbuilt_memory':Inbuilt_memory}, inplace=True)
fillna_df = phone.fillna(0)
dropna_df = phone.dropna()
display(dropna_df.shape)
display(fillna_df.isnull().any())
phone.tail()
# Вывод распределения количества наблюдений по меткам (классам)
from src.utils import split_stratified_into_train_val_test
display(phone.Class.value_counts())
display()
data = phone[["Class", "Spec_score", "Rating"]].copy()
df_train, df_val, df_test, y_train, y_val, y_test = split_stratified_into_train_val_test(
data, stratify_colname="Class", frac_train=0.60, frac_val=0.20, frac_test=0.20
)
display("Обучающая выборка: ", df_train.shape)
display(df_train.Class.value_counts())
display("Контрольная выборка: ", df_val.shape)
display(df_val.Class.value_counts())
display("Тестовая выборка: ", df_test.shape)
display(df_test.Class.value_counts())
from imblearn.over_sampling import ADASYN
ada = ADASYN()
display("Обучающая выборка: ", df_train.shape)
display(df_train.Class.value_counts())
X_resampled, y_resampled = ada.fit_resample(df_train, df_train["Class"]) # type: ignore
df_train_adasyn = pd.DataFrame(X_resampled)
display("Обучающая выборка после oversampling: ", df_train_adasyn.shape)
display(df_train_adasyn.Class.value_counts())
df_train_adasyn
from imblearn.under_sampling import RandomUnderSampler
import pandas as pd
# Создание экземпляра RandomUnderSampler
rus = RandomUnderSampler()
# Проверка исходной обучающей выборки
display("Обучающая выборка: ", df_train.shape)
display(df_train.Class.value_counts())
# Выполнение undersampling
X_resampled, y_resampled = rus.fit_resample(df_train.drop(columns=["Class"]), df_train["Class"]) # type: ignore
df_train_undersampled = pd.DataFrame(X_resampled)
# Добавление целевой переменной обратно в выборку
df_train_undersampled["Class"] = y_resampled
# Проверка обучающей выборки после undersampling
display("Обучающая выборка после undersampling: ", df_train_undersampled.shape)
display(df_train_undersampled.Class.value_counts())
df_train_undersampled
# Вывод распределения количества наблюдений по меткам (классам)
from src.utils import split_stratified_into_train_val_test
display(car.LeatherInterior1.value_counts())
display()
data = car[["LeatherInterior1", "Airbags", "ProdYear"]].copy()
df_train, df_val, df_test, y_train, y_val, y_test = split_stratified_into_train_val_test(
data, stratify_colname="LeatherInterior1", frac_train=0.60, frac_val=0.20, frac_test=0.20
)
display("Обучающая выборка: ", df_train.shape)
display(df_train.LeatherInterior1.value_counts())
display("Контрольная выборка: ", df_val.shape)
display(df_val.LeatherInterior1.value_counts())
display("Тестовая выборка: ", df_test.shape)
display(df_test.LeatherInterior1.value_counts())
from imblearn.over_sampling import ADASYN
ada = ADASYN()
display("Обучающая выборка: ", df_train.shape)
display(df_train.LeatherInterior1.value_counts())
X_resampled, y_resampled = ada.fit_resample(df_train, df_train["LeatherInterior1"]) # type: ignore
df_train_adasyn = pd.DataFrame(X_resampled)
display("Обучающая выборка после oversampling: ", df_train_adasyn.shape)
display(df_train_adasyn.LeatherInterior1.value_counts())
df_train_adasyn
from imblearn.under_sampling import RandomUnderSampler
import pandas as pd
# Создание экземпляра RandomUnderSampler
rus = RandomUnderSampler()
# Проверка исходной обучающей выборки
display("Обучающая выборка: ", df_train.shape)
display(df_train.LeatherInterior1.value_counts())
# Выполнение undersampling
X_resampled, y_resampled = rus.fit_resample(df_train.drop(columns=["LeatherInterior1"]), df_train["LeatherInterior1"]) # type: ignore
df_train_undersampled = pd.DataFrame(X_resampled)
# Добавление целевой переменной обратно в выборку
df_train_undersampled["LeatherInterior1"] = y_resampled
# Проверка обучающей выборки после undersampling
display("Обучающая выборка после undersampling: ", df_train_undersampled.shape)
display(df_train_undersampled.LeatherInterior1.value_counts())
df_train_undersampled
# Вывод распределения количества наблюдений по меткам (классам)
from src.utils import split_stratified_into_train_val_test
display(house.bedrooms.value_counts())
display()
data = house[["bedrooms", "sqft_living", "sqft_lot"]].copy()
df_train, df_val, df_test, y_train, y_val, y_test = split_stratified_into_train_val_test(
data, stratify_colname="bedrooms", frac_train=0.60, frac_val=0.20, frac_test=0.20
)
display("Обучающая выборка: ", df_train.shape)
display(df_train.bedrooms.value_counts())
display("Контрольная выборка: ", df_val.shape)
display(df_val.bedrooms.value_counts())
display("Тестовая выборка: ", df_test.shape)
display(df_test.bedrooms.value_counts())
from imblearn.over_sampling import ADASYN
ada = ADASYN()
display("Обучающая выборка: ", df_train.shape)
display(df_train.bedrooms.value_counts())
X_resampled, y_resampled = ada.fit_resample(df_train, df_train["bedrooms"]) # type: ignore
df_train_adasyn = pd.DataFrame(X_resampled)
display("Обучающая выборка после oversampling: ", df_train_adasyn.shape)
display(df_train_adasyn.bedrooms.value_counts())
df_train_adasyn
from imblearn.under_sampling import RandomUnderSampler
import pandas as pd
# Создание экземпляра RandomUnderSampler
rus = RandomUnderSampler()
# Проверка исходной обучающей выборки
display("Обучающая выборка: ", df_train.shape)
display(df_train.bedrooms.value_counts())
# Выполнение undersampling
X_resampled, y_resampled = rus.fit_resample(df_train.drop(columns=["bedrooms"]), df_train["bedrooms"]) # type: ignore
df_train_undersampled = pd.DataFrame(X_resampled)
# Добавление целевой переменной обратно в выборку
df_train_undersampled["bedrooms"] = y_resampled
# Проверка обучающей выборки после undersampling
display("Обучающая выборка после undersampling: ", df_train_undersampled.shape)
display(df_train_undersampled.bedrooms.value_counts())
df_train_undersampled