Как можно оценить стоимость составной части, зная только стоимость целого?

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

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

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

Аналогия немного ломается для рассматриваемого мной случая, поскольку в рамках этого примера с розничным продавцом товар, вероятно, будет иметь фиксированную цену. Однако в моем случае каждый товар имеет известную произвольную тарифную стоимость, но неизвестную фактическую стоимость. Мы будем знать только агрегированную фактическую стоимость вместе с другими товарами, которые могут быть сгруппированы под одной “транзакцией”. Тарифные и фактические стоимости, вероятно, будут иметь сильную линейную корреляцию с некоторой вариативностью, хотя фактические значения для отдельных товаров не фиксируются.

Надеюсь, это имеет смысл! Я хотел бы узнать, как определить эту задачу, какой подход вы бы выбрали для решения подобной проблемы? И любые ссылки на связанные материалы будут очень полезными.

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

  • Каждый отдельный ген представляет собой товар из списка всех возможных товаров.
  • Каждому гену/товару сначала случайным образом присваивается цена (экспрессия гена).
  • При применении мутации к гену/товару его цена немного случайным образом изменяется.
  • Кроссовер приводит к тому, что “дочерний ген” получает значение, равное среднему из двух “родительских генов”.

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

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

Эта проблема является линейной программой!

Ее можно сформулировать как:

\begin{equation*}\begin{aligned}& \underset{x}{\text{max}}& & 0 \\& \text{при условии}& & N(\mathbf{x + c_{tarriff}}) = \mathbf{p}\\& & & \mathbf{x_i} \geq 0\end{aligned}\end{equation*}

Решатель, ожидающий вашу задачу в стандартной форме, будет ожидать от вас ввода

\begin{equation*}\begin{aligned}& \underset{x}{\text{max}}& & 0 \\& \text{при условии}& & N\mathbf{x} = \mathbf{p} – N\mathbf{c_{tarriff}}\end{aligned}\end{equation*}

Где все, кроме $\mathbf{x}$, является известной константой, а условие положительности на $\mathbf{x}$ является явным.

Объяснение:

Тарифы: $\mathbf{c_{tarriff}}$ — это вектор, где $\mathbf{c_{i}}$ — тарифная стоимость для каждого товара.

Цена за единицу: $\mathbf{x}$ — это вектор и единственная переменная в задаче. $\mathbf{x_{i}}$ — цена за единицу товара $i$, исключая тариф. Таким образом, $(\mathbf{x + c_{tarriff}})_i$ — это общая цена за единицу каждого товара.

Стоимость за транзакцию: $\mathbf{p}_j$ — это общая цена, уплаченная в транзакции $j$.

Стоимость для одной транзакции: Если у вас есть вектор $\mathbf{n}$, где $\mathbf{n}_i$ — количество раз, когда товар $i$ был куплен в транзакции, то $\mathbf{n} \cdot (\mathbf{x + c_{tarriff}}) = p_{transaction}$

Матрица количества по транзакциям: Мы можем объединить все эти векторы $\mathbf{n}$ в матрицу $N$, где $N_{ji}$ — это количество товара $i$, купленного в транзакции $j$. Это означает, что $N (\mathbf{x + c_{tarriff}}) = \mathbf{p}$, цена за все транзакции.

Когда решение уникально?

Если $N$ имеет полную строковую ранг, то цены могут быть определены уникально. В противном случае будет аффинное подпространство расстановок цен, которые удовлетворяют ограничению.

Другие замечания:

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

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

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

Метод Линейного Программирования

Обозначим:

  • ( \mathbf{c_{tarriff}} ) – вектор, где каждый элемент ( \mathbf{c_{i}} ) представляет собой тариф для соответствующего товара.
  • ( \mathbf{x} ) – вектор, где ( \mathbf{x_{i}} ) — это стоимость единицы товара ( i ) без учета тарифа.
  • ( \mathbf{p}_{j} ) – вектор, представляющий общую сумму, уплаченную за транзакцию ( j ).
  • ( N ) – матрица транзакций, где ( N_{ji} ) обозначает количество товара ( i ), купленного в транзакции ( j ).

В такой ситуации задача может быть сформулирована следующим образом:

  1. Нам необходимо решить систему линейных уравнений:

[
N (\mathbf{x} + \mathbf{c_{tarriff}}) = \mathbf{p}
]

  1. Чтобы решить эту систему, нам нужно выразить ( \mathbf{x} ):

[
N \mathbf{x} = \mathbf{p} – N \mathbf{c_{tarriff}}
]

А затем, если матрица ( N ) полнорнранговая (имеет полный ранг), то системы уравнений будет иметь единственное решение. В противном случае, решения будут находиться в аффинном подпространстве.

Метод Генетических Алгоритмов

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

  1. Каждая "особь" в популяции представляет собой набор цен для всех товаров.
  2. Изначально цены назначаются случайно.
  3. При применении мутации цена каждого товара немного изменяется случайным образом.
  4. При кроссовере цена "потомка" берется как среднее значение цен двух родителей.

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

Заключение

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

Если вы хотите углубиться в эту тему, я рекомендую следующие материалы:

  1. Линейное Программирование: "Introduction to Linear Optimization" от Dimitris Bertsimas и John Tsitsiklis.
  2. Генетические Алгоритмы: "Genetic Algorithms in Search, Optimization, and Machine Learning" от David E. Goldberg.

Эти ресурсы помогут вам лучше понять методы и их применение в анализе данных.

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

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