
Если вы думаете о новом ноутбуке, вы можете задаться вопросом, сколько вы должны заплатить за него. Вы можете пролистать веб-сайты, но немного кода Python и немного линейной регрессии могут облегчить работу.
Зачем нужен прогнозатор цен на ноутбуки?
Вы можете просмотреть тысячи страниц и прочесать физические магазины, но это займет много времени. Мне нравятся компьютеры, но у меня нет времени или желания заниматься этим. У меня есть другие дела, которыми я бы предпочел заняться. Я хотел бы иметь программу, в которую я могу ввести характеристики, например, сколько оперативной памяти мне нужно или какое разрешение экрана мне нужно, и она выдаст цену.
На рынке так много машин, что мне было бы сложно вычислить всю эту информацию вручную. Я также подумал, что поделиться этой информацией с другими людьми, которые могут быть на рынке для нового ноутбука, может быть полезно. Кто хочет переплачивать за машину? Я нет, и я могу предположить, что вы, вероятно, тоже.

С моим знанием линейной регрессии из статистики я понял, что могу легко построить модель для ответа на эти вопросы. Python — отличный язык, и у меня уже были некоторые базовые знания о нем. Он стал популярен в анализе данных, потому что он достаточно прост для людей без компьютерных знаний, но при этом предлагает мощные библиотеки для анализа данных.
Сборка статистического инструментария Python
Для этого проекта я использовал части статистической экосистемы Python, с которыми я уже был знаком.
Я бы уже настроил среду Mamba с этими инструментами. Хотя многие системы, включая Linux, включают Python, он предназначен для поддержки системы и в меньшей степени для пользовательских программ. Если вы обновите системный Python, вы можете обнаружить, что зависящие от него скрипты сломаются. Существуют инструменты для установки пользовательских сред, таких как VirtualEnv.
Первый компонент — NumPy. Это популярная библиотека для всех видов числовых операций, в частности статистических и линейных алгебраических вычислений, которые будут происходить в фоновом режиме.
Следующая библиотека, которая вам понадобится, — это Pandas, которая позволит вам импортировать набор данных и просматривать его в столбцах как «фрейм данных». Это немного похоже на нечто среднее между реляционной базой данных и электронной таблицей. Вы также можете выполнять некоторые мощные манипуляции с вашими данными.
Seaborn — это библиотека для просмотра статистических графиков данных. Я использую ее для визуализации распределений данных в гистограммах, диаграммах рассеяния и линейных регрессиях.

Наконец, Pingouin позволяет мне легко выполнять множество статистических тестов, без необходимости запоминать все те формулы, которые я забыл на занятиях по статистике в колледже много лет назад. Это программа, которая построит модель посредством множественной линейной регрессии розничной цены против всех атрибутов ноутбука.
Собрать все это вместе просто в большинстве Unix-подобных сред, включая Windows, использующую Windows Subsystem for Linux. Вы можете следовать инструкциям на веб-странице, чтобы установить ее.
Jupyter notebooks предоставляет относительно удобный способ запуска команд Python и просмотра результатов, а также сохранения результатов для дальнейшего использования, но это строго необязательно. Я создал Jupyter notebook и буду демонстрировать примеры кода из него. Я разместил его на своем GitHub, так что вы можете увидеть код и некоторые примеры, которые я не смог охватить в этой статье.
Установив Mamba, вы можете создать нужную вам среду. Как кулинарное шоу, у меня уже была готовая. Чтобы активировать ее, я ввожу это в оболочку Linux:
мамба активировать статистику
Получение данных с ноутбука
Чтобы построить набор данных для регрессионной модели, я мог бы прочесать интернет-магазины и создать полную базу данных ноутбуков. Это заняло бы много времени, а также очистило бы данные, чтобы они были согласованными. К счастью, кто-то уже это сделал.
На Kaggle доступна база данных ноутбуков с определенными характеристиками оборудования, такими как скорость процессора, объем оперативной памяти, объем хранилища, а также горизонтальное и вертикальное разрешение экрана.
Цена ноутбуков была указана в евро, но быстрая проверка на Xe.com в июле 2025 года показала, что обменный курс между евро и долларами США довольно близок.
Построение регрессионной модели
Собрав среду и получив данные, теперь пришло время построить модель. Сначала мне нужно импортировать библиотеки, которые я собираюсь использовать.
импортировать numpy как np
импорт панд в виде pd
импорт морского как sns
% matplotlib встроенный
импортировать пингуин как pg
Эти строки импортируют библиотеки NumPy, Pandas, Seaborn и Pinguoin. Numpy, Pandas, Seaborn и Pinguoin сокращаются до «np, pd, sns и pg». Строка, которая начинается с «%», предназначена для использования в блокнотах Jupyter. Она сообщает ему, что нужно использовать библиотеку Matplotlib, которая рисует графики для их отображения в блокноте Jupyter. В противном случае они будут отображаться в отдельном окне.
Далее мы импортируем данные с помощью Pandas:
ноутбуки = pd.read_csv(«data/laptop_prices.csv»)
Это создаст фрейм данных Pandas. Мы можем увидеть, как данные располагаются с помощью метода head():
ноутбуки.head()

Мы также можем увидеть базовую описательную статистику всех числовых столбцов с помощью метода describe().
ноутбуки.describe()

Будет показано среднее значение, медиана, стандартное отклонение, минимальное значение, нижний квартиль или 25-й процентиль, медиана, верхний квартиль или 75-й процентиль и максимальное значение каждого столбца.
Мне также нравится визуализировать распределение данных с помощью гистограмм. Это делает Displot Сиборна.
Чтобы увидеть, как распределяются цены:
sns.displot(x=’Цена_евро’,данные=ноутбуки)

Это говорит Pingouin, что нужно отложить цены вдоль оси x и использовать в качестве источника данные ноутбука. Хвост распределения заметно смещен вправо.
Мы построим модель, которая использует различные спецификации. Она будет выглядеть примерно так:
цена = a(скорость ЦП) + b(ОЗУ) + c(размер в дюймах) …
Буквы заменяют коэффициенты, определяемые регрессией. Это похоже на простую линейную регрессию, которую вы могли видеть, но вместо подгонки линии под диаграмму рассеяния вы подгоняете плоскость. Поскольку в этой модели больше трех измерений, на самом деле это гиперплоскость.
Чтобы получить регрессию цены в евро в зависимости от размера ноутбука, скорости процессора, размера экрана, веса, основного хранилища и дополнительного хранилища, используйте функцию линейной регрессии Пингуина:
pg.linear_regression(ноутбуки[[‘Дюймы’,’Оперативная память’,’Вес’,’Ширина экрана’,’Высота экрана’,’Частота процессора’,’Основная память’,’Вторичная память’]],ноутбуки[‘Цена_евро’],relimp=True)

Это даст нам коэффициенты для этого уравнения регрессии. Опция relimp= скажет Pingouin рассчитать, какой вклад каждая переменная вносит в цену. Коэффициенты будут отображены в самом левом столбце, а столбец справа скажет нам, что RAM является самым большим предиктором цены. Число, на которое следует обратить внимание при определении того, насколько хорошо подходит, — это квадрат коэффициента корреляции, который в этой таблице равен «r2». Он составляет около 66, что означает, что это довольно хорошее соответствие.
С предсказанными коэффициентами мы теперь можем подставить значения в уравнение, чтобы предсказать цену. Вот функция, которая делает именно это:
def price(дюймы,ram,вес,screenw,screenh,cpu_freq,primary_storage,secondary_storage):
вернуть 77.11 + -69.81*дюймы + 77.89*ram + 92.04*ram + 0.04*screenw + 0.59*screenh + 284.51 — 0.21*первичное_хранилище + -0.04 * вторичное_хранилище
Вам следует сделать отступ во второй строке, но ограничения нашей системы требуют, чтобы я представил это именно так.
Действительно ли цены различаются между брендами?
Эта регрессионная модель рассматривает только спецификации. Вы можете задаться вопросом, действительно ли цена является предиктором цены. Мы можем использовать дисперсионный анализ, или ANOVA, чтобы определить, значительны ли различия между брендами. Поскольку данные о ценах были искажены, как видно из гистограммы, непараметрический тест будет более точным. У Pingouin есть тест Краскела-Уоллиса, который делает это.
Это позволит проверить нулевую гипотезу об отсутствии связи между ценой и брендом:
pg.kruskal(data=ноутбуки,dv=’Цена_евро’,between=’Компания’).round(2)

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