Этот проект осуществляется в рамках курса Udacity и начинается с трех вопросов заинтересованных сторон к наборам данных AirBnB из Бостона за 2016/2017/2018/2019 годы. Чтобы ответить на вопросы, был реализован блокнот Juypter с использованием процесса CIRSP-DM. Данные считываются, обрабатываются, моделируются и оцениваются в этом блокноте.

Подробный блокнот и соответствующий набор данных, которые использовались для анализа, можно найти по следующей ссылке: https://github.com/RepomanGithub/Data-Science-Homework.

Вопросы от возможных заинтересованных сторон, на которые я хотел бы ответить, следующие:

Первый бизнес-вопрос: для достижения целевого маркетинга необходимо проанализировать, как текущая цена распределяется по отдельным районам города, чтобы размещать в Интернете рекламу достопримечательностей отдельных районов города, чтобы показать количество бронирований в этих районах. Как выглядит текущее распределение бронирований по районам в Бостоне в 2019 и 2018 годах? Какова средняя цена двух самых бронируемых районов Бостона в 2019 году?

Второй деловой вопрос. Как менялась средняя цена на отдельные типы номеров с 2018 по 2019 год? Здесь можно извлечь рыночный потенциал.

Третий бизнес-вопрос:можно ли получить цену из предыдущих данных на основе типа номера и месяца? На основе этого можно определить поведение клиентов и ситуацию на рынке. Можно ли спрогнозировать динамику цен на тип номера? Вопросы отдела маркетинга могут быть следующими: в каком районе мы должны больше рекламировать или какие типы номеров мы также должны больше продавать на социальных платформах?

Мы видим предопределенный отрывок даты:

ID — это идентификатор бронирования
host_id — это host_id спецификации. host_name с именем пользователя
соседство — район города
цена — цена комнаты
уборка плата плата за уборку
room_type тип комнаты< br /> месяц в каком месяце был забронирован номер
год в каком году был забронирован номер
город в каком городе был забронирован номер

#Чтобы ответить на эти вопросы, мы будем использовать некоторые библиотеки
import numpy as np #mathematics lib
import pandas as pd #datastrucutr lib
import matplotlib.pyplot as plt #vis lib
from sklearn.linear_model import LinearRegression #lib для машинного обучения
from sklearn.model_selection import train_test_split #для обучения машинному обучению
from sklearn.metrics import r2_score, mean_squared_error #для оценки модели
import seaborn as sns
Данные, которые мы будем использовать, представляют собой объединение всех объявлений из Бостона — http://insideairbnb.com/get-the-data.html.

На сайте AirBnB мы можем найти объявления из Бостона за 2019, 2018, 2017, 2016 годы и разные месяцы.

#КРИСПроцесс | Понимание данных
#Загрузка данных по Бостону (объединение всех списков с некоторой специальной информацией, которую мы будем использовать)
df_Boston_all = pd.read_csv('./added_Master_Boston.csv')
#CRISProcess | Понимание данных
#Ознакомьтесь со структурой набора данных, чтобы понять структуру
df_Boston_all.head()
#Теперь мы рассмотрим. недостающие значения в наборе данных для лучшего понимания. [0]).plot(kind="bar");
plt.title("Распределение данных в наборе данных [в %]");
plt.legend()
ax.set_xlabel('Месяц');
ax.set_ylabel('Цена [$]');

Как мы видим, примерно в 16% набора данных отсутствуют значения для clean_fee, и только в 1% отсутствуют значения для соседей:

Первый вопрос

Как выглядит текущее распределение бронирования номеров по районам Бостона в 2019 и 2018 годах? Чтобы понять, на какие типы номеров следует ориентироваться в первую очередь, смотрим на распределение забронированных номеров. Какова средняя цена двух самых бронируемых районов по типу комнаты в Бостоне в 2019 и 2018 годах? Приступая к ответу на этот вопрос, нам нужно разделить дату по годам и room_type. Как мы могли видеть выше, гостиничные номера и общие номера бронируются менее чем на 1% и не будут учитываться:

Для ответов на вопросы о ценах на номер и т. д. Прежде всего, мы должны понять, являются ли данные непротиворечивыми и полными. Для этого проверяем данные по N/A записям и оцениваем их, показывая количество пропущенных данных в процентах. Как выглядит текущее распределение бронирования номеров по районам в Бостоне в 2019 году?

# Предоставьте серию подсчетов pandas для каждого района statused_vals_Boston_2019_entire = pd.Series(df_Boston_entire_2019.neighbourhood.value_counts())(ed_vals_Boston_2019_entire/df_Boston_entire_2019.shape[0]).plot(kind="bar");plt.title(" Распределение забронированных частных номеров по районам в записи данных Boston 2019 [в %]»); ');

Как выглядит текущее распределение бронирования номеров по районам в Бостоне в 2018 году?

Разделив количество каждого района на общее количество забронированных номеров в 2019 году:

Boston_proom_2019_max = ed_vals_Boston_2019_proom/df_Boston_proom_2019.shape[0]; #сохраняет распределение бронирования

Сохранение количества забронированных районов:

Neighbourhood_list_2019_proom = df_Boston_proom_2019.neighbourhood.value_counts().index.tolist()
result_mean_2019_proom = [] #переменная для хранения средних значений
result_median_2019_proom = [] #переменная для хранения медианных значений

Оценка средней и медианной цены отдельной комнаты в каждом районе в 2019 году для Neigbourhood_list_2019_proom в Neigbourhood_list_2019_proom:

df_tmp_prices = df_Boston_proom_2019.loc[df_Boston_proom_2019['neighbourhood'] == Neighbourhood_list_2019_proom]
#сравнение следующего названия района для применения вычислений
result_mean_2019_proom.append(df_tmp_prices['price'].mean()) # вычисление средней цены всех комнат в районе
result_median_2019_proom.append(df_tmp_prices['price'].median()) #вычисление средней цены всех комнат в районе
#Boston_‹room_type›_ ‹year›_values ​​— это новый фрейм данных для хранения вышеуказанной информации.

Какова средняя цена двух самых бронируемых районов Бостона в 2018/19 году?

Второй деловой вопрос

Как менялась средняя цена на отдельные типы номеров с 2018 по 2019 год?

Чтобы ответить на следующий вопрос, нам нужно понять поведение данных и распределение цен. Мы покажем средние и медианные значения двух типов номеров в 2018/19 гг. Далее мы посчитаем разницу и попытаемся понять потенциал рынка и ситуацию. Для лучшего понимания мы оценим среднее значение и медиану значений, чтобы избежать предвзятого взгляда на данные из-за составителей. Сначала мы нанесем средние цены на количество забронированных номеров.

Как видим, медианная цена отдельной комнаты в Бостоне в 2018 и 2019 годах одинакова. Мы также хотим посмотреть на распределение средних и медианных цен для разных жилых районов на отдельную комнату в Бостоне 2018/19.

Как видим, наибольшая разница проявляется в районах Правительственный центр и Чарлстаун.

На графике видно, что цена на отдельную комнату в Бостоне немного растет с 2018 по 2019 год. Чтобы указать рост цен с 2018 по 2019 год, мы рассматриваем средние значения и медианы цены. Среднее значение кажется хорошим выбором для оценки наихудшего случая, поскольку оно обычно немного выше среднего значения:

На следующем графике мы покажем разницу среднего значения цены в %. Итак, мы видим поведение цены для каждого района:

Как мы видим, цена растет на перекрестке в центре города примерно на 1,4% и падает примерно на -2,0% в центре города:

Проанализировав, как рост цен связан с двумя разными показателями, мы можем приступить к подготовке данных для модели индикации цен на следующий год. Информация, полученная до сих пор, может быть первоначально использована, например, для может быть использован целевой анализ рынка в отдельных районах.
Здесь маркетинговые меры могут быть получены в соответствующих районах, где цена падает. И анализирует, почему цена растет в некоторых районах города, чтобы иметь возможность размещать таргетированную рекламу. Мы также получаем первое впечатление о том, чего мы ожидаем от модели, которая, возможно, указала цену на ближайшие годы. Это основа для оценки качества модели или для проверки правдоподобия указания цены. Сделаем предположение, что мы можем индексировать качество прогноза нашей линейной модели на 2019 г. на основе прогноза цен моделью, обученной только на данных 2018 г. Чем больше отклонение прогноза данных 2019 г. на основе данных 2018 г. данных, тем хуже качество прогноза (в худшем случае, поскольку у нас нет большого количества выборок, поскольку мы используем среднее значение цен по всем районам каждый месяц). Затем мы также можем предположить это смещение в прогнозе с помощью модели, которая знает только данные за 2019 год для цены в 2020 году.

Третий деловой вопрос

Можно ли вывести цену из предыдущих данных на основе типа номера и его расположения? Из этого можно вывести поведение клиентов и ситуацию на рынке. Можно ли с помощью линейной модели спрогнозировать динамику цен на все типы номеров в зависимости от типа номера и района? Вопросы отдела маркетинга могут быть следующими: В каком районе мы должны рекламировать больше? Какие типы номеров следует рекламировать больше? Для этого подхода мы создадим фрейм данных, который будет учитывать среднюю цену каждого типа номера за месяц в 2018/19 году. Используя этот временной ряд, мы оценим линейную модель для прогнозирования ценового тренда на 2020 год. Мы начнем с двух функций. Эти функции будут извлекать данные из текущего фрейма данных и предварительно обрабатывать их для линейной модели. После этого шага мы будем следовать CRISProcess для моделирования данных, разделив данные на тестовые и обучающие данные. Обучение модели и ее оценка. Прогнозирование цен и оптимизация модели для вывода:

Сводка
1. Удалите строки с отсутствующими значениями ответов
2. Удалите столбцы с NaN для всех значений
3. Используйте create_dummy_df для создания фиктивных категориальных столбцов
> 4. Заполните среднее значение столбца для всех отсутствующих значений
5. Разделите данные на матрицу X и вектор отклика y
6. Создайте обучающие и тестовые наборы данных
7. Создайте экземпляр модели линейной регрессии с нормализованными данными
8. Подгоните модель к обучающим данным
9. Предскажите ответ для обучающих данных и тестовых данных
10. Получите значение rsquared для обоих обучающие и тестовые данные

Используя функции Jupyter-Notebook, мы покажем средние цены спецификации. тип комнаты для каждого года, чтобы понять, как должна выглядеть модель для следующих данных:

Если мы снова посчитаем среднее значение и медиану для каждого района определенного типа комнаты за каждый месяц, мы получим следующие данные. В ходе процесса необходимо было принять среднее значение и медиану отсутствующих значений за месяцы 2018 года. Последние четыре месяца 2018 года были экстраполированы с использованием среднего / медианы всего набора данных, поскольку необходимой базы данных нет, и это наиболее вероятный способ замены отсутствующих данных:

Теперь мы выполним линейный подход для прогнозирования цен и начнем и разделим набор данных на тестовые и обучающие данные:

#Разделить на поезд и тест
X_train, X_test, y_train, y_test = train_test_split(X_2019, Y_proom_2019, test_size = 0,3, shuffle=False)

На следующем шаге мы построим нашу линейную модель:

#Подбор модели
lm_model = LinearRegression(normalize=True) # Создание экземпляра
lm_model.fit(X_train, y_train) #Fit

Теперь мы можем предсказать цену:

#Прогнозирование цены
y_test_preds = lm_model.predict(X_2019)

И оцените цену:

#Оценка обучения
r_sq_train = linear_regressor.score(X_train, y_train)

#Оценка теста
r_sq_test = linear_regressor.score(X_test, y_test)
print('коэффициент детерминации — Train:', r_sq_train)
print('коэффициент детерминации — Test:', r_sq_test )
print('intercept:', lm_model.intercept_) # печать перехвата модели

К оценке следует применять следующие определения: Коэффициент детерминации, обозначаемый как R2 или r2, представляет собой долю дисперсии зависимой переменной, которую можно предсказать по независимой переменной. R2 дают некоторую информацию о соответствии модели. Значения R2 за пределами диапазона от 0 до 1 могут возникать, когда модель хуже соответствует данным, а 1 будет означать идеальную репликацию данных. Характеристические значения модели могут быть рассчитаны с помощью оценки команд:

коэффициент детерминации - поезд: 0,08499758895455423 коэффициент детерминации - тест: -0,7034279509846788

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

коэффициент детерминации: 0,02151652021443351

Две модели можно увидеть на иллюстрации. Зеленым цветом показана модель со всеми точками данных, а синим цветом — модель с разделенными данными. Визуально модель описывает данные зеленым цветом, то есть лучше всего тестовые и обучающие данные. Кроме того, оценка зеленой модели также лучше. На последнем шаге показаны модель средней цены и медианы. Основываясь на текущем качестве, а также визуальном осмотре, я бы использовал зеленую модель для указания цены. Также была настроена модель для медианы для дальнейшей проверки:

Мы видим, что мы реализовали две модели для прогнозирования цен на частные комнаты. В одной модели мы рассчитываем среднюю цену комнаты, а в другой — медиану цены комнаты. Основываясь на доступных данных и моделях, цена «в среднем» как медиана цены в районах увеличится в общей сложности примерно на 10 долларов. Среднее показывает аналогичную картину из-за поведения моделей на подъеме. Однако обе ценовые модели существенно не различаются по приросту за счет смещения цены. Следующим шагом будет подробный анализ районов и использование данных из крупных городов для большей вариативности. Таким образом, мы ответили на три вопроса в ходе вашего блокнота Juyper и, наконец, разработали две модели ценообразования для частных комнат в Бостоне.

Сводка

Мы проанализировали данные AirBnB из Бостона за 2018 и 2019 годы. Мы использовали процесс CIRSP-DM для анализа данных, а также определили и разработали ряд показателей для оценки и интерпретации нашей модели. Мы также ответили на три бизнес-вопроса и рассказали о дальнейшем анализе. Надеюсь, вы найдете это полезным!