Объединение двух наборов данных с различными признаками для предсказания в машинном обучении.

Вопрос или проблема

Я пытаюсь создать модель, которая предсказывает цены на недвижимость с помощью xgboost в машинном обучении, мой вопрос: могу ли я объединить два набора данных для этого?
Первый набор данных: 13 характеристик
Второй набор данных: 100 характеристик
Разница между двумя наборами данных в том, что первый набор данных – это сделки с недвижимостью с 2018 по 2021 год с такими характеристиками, как площадь, регион.
А второй набор данных также содержит сделки, но с 2011 по 2016 год, но с большим числом характеристик, таких как балкон, ремонт и многие другие характеристики, которых нет в первом наборе данных.
Идея в том, что мне нужен первый набор данных, потому что он новый и актуален с новыми ценами и инфляцией.
А второй набор данных мне нужен, потому что я хочу включить балкон и еще 5 характеристик в мои предсказания.
Могу ли я это сделать? И какой лучший подход для замены отсутствующих характеристик в первом наборе данных, которые есть только во втором наборе данных?

# импорт библиотеки pandas
import pandas as pd

# создание dataframe1
df1 = pd.DataFrame({
"Цена" : [1, 2, 3, 4, 2, 3, 8],
"Площадь" : [20, 30, 40, 50, 30, 54, 45],
"Регион" : ["Мумбаи", "Дели", "Хайдарабад", "Бангалор", "Хайдарабад", 
"Бангалор", "Визаг"],
"Год" : [2018, 2018, 2019, 2020, 2020, 2021, 2021],
"РядомСМорем" : [1, 0, 0, 0, 0, 0, 1]
})
df1.head()

# вывод
       Цена    Площадь    Регион     Год   РядомСМорем
   0    1       20      Мумбаи     2018   1
   1    2       30      Дели      2018   0
   2    3       40      Хайдарабад  2019   0
   3    4       50      Бангалор  2020   0
   4    2       30      Хайдарабад  2020   0

# создание dataframe2
df2 = pd.DataFrame({
"Цена" : [1, 2, 3, 4],
"Площадь" : [20, 30, 40, 50],
"Регион" : ["Мумбаи", "Дели", "Хайдарабад", "Бангалор"],
"Балкон" : [2, 1, 0, 3],
"Спальни" : [2, 3, 4, 3],
"Кухня" : [1, 1, 2, 1],
"Год" : [2015, 2016, 2014, 2015]    
})
df2.head()

# вывод
   Цена    Площадь    Регион     Балкон  Спальни   Кухни   Год
0   1       20      Мумбаи     2        2           1         2015
1   2       30      Дели      1        3           1         2016
2   3       40      Хайдарабад  0        4           2         2014
3   4       50      Бангалор  3        3           1         2015

# создание списка столбцов в каждом dataframe
df1Columns = list(df1.columns)
df2Columns = list(df2.columns)

# Инициализация пустых списков столбцов, которые нужно добавить в df1 и df2
ДополнительныеСтолбцыДляДобавленияВDf1 = list()
ДополнительныеСтолбцыДляДобавленияВDf2 = list()

# цикл по каждому столбцу в df2
for column in df2Columns:
    # если столбец не в df1
    if column not in df1Columns:
        # добавляем столбец в ДополнительныеСтолбцыДляДобавленияВDf1
        ДополнительныеСтолбцыДляДобавленияВDf1.append(column)

# цикл по каждому столбцу в df1
for column in df1Columns:
    # если столбец не в df2
    if column not in df2Columns:
        # добавляем столбец в ДополнительныеСтолбцыДляДобавленияВDf2
        ДополнительныеСтолбцыДляДобавленияВDf2.append(column)


# список столбцов, которые отсутствуют в df1, но есть в df2
ДополнительныеСтолбцыДляДобавленияВDf1

# вывод
['Балкон', 'Спальни', 'Кухня']

# список столбцов, которые отсутствуют в df2, но есть в df1
ДополнительныеСтолбцыДляДобавленияВDf2

# вывод
['РядомСМорем']

# добавляем столбцы, которые отсутствуют в dataframe1, 2
for column in ДополнительныеСтолбцыДляДобавленияВDf1:
    df1[column] = ""
for column in ДополнительныеСтолбцыДляДобавленияВDf2:
    df2[column] = ""

# создаем dataframe из этих двух dataframes
DataFrame = pd.concat([df1, df2], axis = 0)
# перемешиваем dataframe, чтобы выбрать выборки из обоих dataframes для отображения в верхних 5
DataFrame = DataFrame.sample(frac=1)
DataFrame.head()

# вывод
   Цена    Площадь    Регион      Год    РядомСМорем   Балкон  Спальни   Кухня
0   3       54      Бангалор   2021    0           
1   8       45      Визаг       2021    1           
2   1       20      Мумбаи      2015                2        2          1
3   2       30      Дели       2016                1        3          1
4   3       40      Хайдарабад   2014                0        4          2

# теперь у нас есть dataframe, который содержит данные из обоих файлов
# мы можем работать с отсутствующими значениями, используя df.fillna(), df.interpolate()

обратитесь к документации pandas fillna https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.fillna.html
поскольку это временные ряды, я предлагаю вам ознакомиться с интерполяцией pandas https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.interpolate.html
Также, пожалуйста, отредактируйте ваш вопрос в понятный формат, чтобы все участники Stack Exchange могли найти, что имеет значение..

Ответ или решение

Слияние двух наборов данных с различными признаками для предсказания цен на недвижимость — это важный шаг в создании эффективной модели машинного обучения. Процедура объединения данных требует внимательности, особенно когда речь идет о данных с разным набором признаков и временными рамками. В данном ответе мы рассмотрим основные аспекты и лучшие практики слияния наборов данных, чтобы вы могли извлечь наибольшую пользу в вашей задаче.

1. Понимание характеристик наборов данных

У вас есть два набора данных:

  • Первый набор данных (df1):

    • Признаки: 13 (например, площадь, регион, год, близость к морю)
    • Период: 2018-2021
  • Второй набор данных (df2):

    • Признаки: 100 (включая наличие балкона, количество спален и кухни)
    • Период: 2011-2016

Важно учитывать, что несмотря на разницу в количестве признаков, вы можете объединить эти наборы данных, чтобы учесть информацию из более старого периода и обогатить вашу модель.

2. Выбор критических признаков

Сосредоточьтесь на тех признаках из второго набора, которые важны для вашей модели. Вы упомянули, что вам нужны только 5 признаков, которые есть во втором наборе. Убедитесь, что эти признаки действительно влияют на цены и их добавление обосновано.

3. Обработка пропущенных значений

При объединении данных у вас будут пропущенные значения, поскольку разные наборы имеют разные признаки. Вот лучшие практики для замены пропущенных значений (NaN):

  • Идентификация NaN: Используйте методы Pandas для обнаружения пропущенных значений. Вы можете воспользоваться df.isnull().sum() для определения количества пропущенных значений в каждом столбце.

  • Заполнение пропущенных значений: Имеется несколько стратегий:

    • Заполнение средним или медианным значением: Это подходит для числовых данных.
    • Заполнение наиболее частыми значениями: Подходит для категориальных данных.
    • Интерполяция: Так как ваши данные представляют собой временные ряды, интерполяция может помочь создать более «гладкие» данные. Используйте df.interpolate() для заполнения пропусков на основе других наблюдений.

4. Объединение наборов данных

После обработки пропущенных значений вы можете объединить наборы как по вертикали (добавляя новые строки), так и по горизонтали (добавляя новые столбцы). В вашем случае использование pd.concat() по оси 0 является правильным вариантом:

import pandas as pd

# Объединение данных
merged_df = pd.concat([df1, df2], axis=0)

5. Масштабирование и кодирование признаков

После слияния вам может понадобиться выполнить дополнительную предобработку:

  • Нормализация или стандартизация: В зависимости от алгоритма, который вы будете использовать, возможно, вам потребуется нормализовать или стандартизировать числовые данные.

  • Кодирование категориальных признаков: Используйте One-Hot Encoding или Label Encoding для категориальных признаков, таких как регион.

6. Выводы и предложения

  • Всегда проводите анализ данных на наличие выбросов и аномалий, так как они могут снизить качество вашей модели.
  • После объединения оцените качество данных, используя визуализацию и статистические методы, чтобы гармонизировать информацию из двух наборов.
  • Не забывайте, что при канцерном предсказании моделей, таких как XGBoost, предобработка данных имеет критическое значение.

Общий подход, который включает агрегацию, обработку пропусков и формирование окончательного набора данных, существенно увеличит шансы на успешное предсказание цен на недвижимость, соединяя актуальность более новых данных с ценными признаками из более ранних.

Оцените материал
Добавить комментарий

Капча загружается...