logo

Как рассчитывается тренд для предметов на Steam

Введение

Эта статья объяснит основы, чтобы вы могли решить, хотите ли использовать тренд для своих целей.

Основы

Сначала нам нужно понять, что подразумевается под "трендом". Для этого мы рассмотрим что-то, что называется линейной регрессией. В основе линейной регрессии лежит попытка найти линию, которая наилучшим образом соответствует точкам данных. Основываясь на этой линии, мы можем видеть, увеличивается или уменьшается цена наблюдаемого предмета за определённый период времени. Рассмотрим следующий пример:

Пример линейной регрессии

Применительно к графику цен предметов на Steam можно сказать, что по оси x у нас время, а по оси y — цена. Одна точка на графике будет представлять цену предмета, по которой он был продан в определённое время (позже мы покажем, что на самом деле это может быть больше одного предмета). Синяя линия — это то, что мы ищем. Она представляет тренд цены предмета.

Особенности Steam

История цен Steam

  • Обратите внимание, что каждая точка на Steam может иметь разное количество проданных предметов. Это связано с тем, что Steam группирует все транзакции на рынке за час и затем рассчитывает медианную цену за этот час. Это важно понимать, потому что это означает, что график истории цен в Steam не является точным представлением реальной истории цен предмета. График показывает транзакции так, как если бы все они имели количество 1.
  • Из-за мошенников и перевода денег между аккаунтами график истории цен может иметь выбросы. Это означает, что некоторые точки могут быть значительно выше или ниже остальных. Это важно понимать, потому что это означает, что тренд может быть искажён этими выбросами. Конечно, мы не хотим учитывать эти выбросы при расчёте тренда и должны их отфильтровать. (См. изображение ниже)

История цен Steam с выбросами

Расчёт тренда

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

1[
2 { date: 1708902000000, price: 48.724, amount: 1 },
3 { date: 1708905600000, price: 84.237, amount: 2 },
4 { date: 1708909200000, price: 47.906, amount: 1 },
5 { date: 1708930800000, price: 48.724, amount: 2 },
6 { date: 1708934400000, price: 21642.498, amount: 1 },
7 { date: 1708938000000, price: 83.425, amount: 1 },
8 { date: 1708945200000, price: 62.989, amount: 1 },
9 { date: 1708959600000, price: 84.907, amount: 3 },
10 { date: 1708970400000, price: 84.253, amount: 1 },
11 { date: 1708977600000, price: 61.371, amount: 1 },
12]

Сначала исключаем строку 6, так как она является выбросом. Затем мы рассчитываем тренд, используя взвешенную линейную регрессию (мы используем количество каждой транзакции как вес). На оси x мы отсчитываем от 0 до n-1, где n — количество транзакций. На оси y у нас цена транзакции. Это приводит к следующей линейной регрессии:

1{
2 equation: [ 0.6264977099236582, 63.62731755725193 ],
3 points: [
4 [ 0, 63.62731755725193 ],
5 [ 1, 64.25381526717558 ],
6 [ 2, 64.88031297709924 ],
7 [ 3, 65.5068106870229 ],
8 [ 4, 66.13330839694656 ],
9 [ 5, 66.75980610687022 ],
10 [ 6, 67.38630381679388 ],
11 [ 7, 68.01280152671754 ],
12 [ 8, 68.6392992366412 ]
13 ],
14 string: 'y = 0.63x + 63.63'
15}

Теперь у нас есть два варианта, какую информацию передать потребителю API.

  • Вернуть уравнение ([ 0.6264977099236582, 63.62731755725193 ]). Первое значение называется углом наклона и показывает увеличение или уменьшение цены (x > 0 означает увеличение, а x < 0 — уменьшение). Второе значение называется пересечением с осью Y и показывает цену в начале периода времени.
  • Взять последнюю точку результата линейной регрессии, разделить её на первую точку и вернуть процентное увеличение или уменьшение. (В данном случае это будет 68.63 / 63.62 = 1.0787) Это означает, что цена увеличилась примерно на 7.87% за последние 24 часа.

Заключение

Эта статья объяснила основы расчёта тренда для предметов на Steam. Здесь рассмотрены только основы и не учитываются все особые случаи. Не стесняйтесь комментировать и задавать вопросы, если у вас есть вопросы в нашем сервере Discord.