Как я могу определить, увеличивается или уменьшается ли тренд во временных рядах? - PullRequest
1 голос
/ 12 апреля 2019

У меня есть данные за несколько недель с проданными единицами xs [недели] = [1,2,3,4] ys ['Units Sold'] = [1043,6582,5452,7571]

из данной серии, мы можем видеть, что, хотя есть падение с xs [2] до xs [3], но в целом тенденция увеличивается. Как обнаружить тренд в наборе данных малых временных рядов.

Является ли поиск уклона для линии лучшим способом? А как рассчитать угол наклона линии в питоне?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

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

Я нашел действительно полезную функцию, т.е. numpy.polyfit ()

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False) 

[Проверьте эту официальную документацию]

Вы можете использовать функцию, подобную этой

def trenddetector(list_of_index,array_of_data, order=1):
    result = np.polyfit(list_of_index, list(data), order)
    slope = result[-2]
    return float(slope)

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

,

если уклон равен + ve -> тенденция к увеличению

если уклон равен -ve -> тенденция к снижению

если уклонявляется нулевым значением -> Нет тренда

Поиграйте с этой функцией, найдите правильный порог в соответствии с вашей проблемой и задайте его как условие.

Пример кода для вашего решения

import numpy as np
def trendline(index,data, order=1):
    coeffs = np.polyfit(index, list(data), order)
    slope = coeffs[-2]
    return float(slope)

index=[1,2,3,4]
List=[1043,6582,5452,7571]
resultent=trendline(index,List)
print(resultent)  

РЕЗУЛЬТАТ

1845.3999999999999

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

0 голосов
/ 12 апреля 2019

Одним из подходов может быть использование Скользящей средней (множество вариаций этого, вы можете увидеть разброс EMA или SMA), которая смотрит на текущий временной шаг и n числа предыдущих шагов, усредняет их и использует это как своего рода «сглаженное» значение. Это даст вам лучшее представление о том, как на самом деле движутся данные, поскольку одно небольшое уменьшение не окажет существенного влияния на градиент линии.

В зависимости от предметной области вашей проблемы, возможно, стоит проверить некоторые статистические данные, используемые в финансовом секторе, такие как DMI (индикатор направленного движения) или MACD.

Надеюсь, это поможет

...