6 votos

Cómo abordar los pronósticos de datos de series de tiempo

Estoy estadísticas novato y cualquier ayuda en la selección de un buen método para analizar los datos que tengo sería muy bienvenida:

Tenemos un cliente que tiene un activo de Facebook de la página, que se publicarán en la regularidad. Tengo los datos de sus últimos, digamos, 200 puestos (desde el último mes) - como muchos de los que le gusta el post tiene y tiempo en que fue publicado. Si suponemos que todo el contenido se recibe igual de bien, yo estoy tratando de alterar su publicación veces, de manera que el contenido va a conseguir más puntos de vista y, en consecuencia, más likes/comentarios/etc. Lo que me gustaría es calcular la probabilidad de que la publicación en las 11h martes ganancia de X más le gusta de la publicación de las 10 de la mañana de martes. Sería bueno si esto puede ser fácilmente capacitarse como nuevos datos de puestos.

He estado buscando algunos métodos para este y los K-vecinos más cercanos o redes Neuronales parecen más probabilidades de funcionar bien (tal vez SVM puede ser adaptado para esto también).

Gracias por su ayuda!

PS: estoy adjuntando una gráfica de los datos de la muestra. Puesto que sólo se dispone de datos de un mes, pensé que había que separar la semana en 168 1 hora en segmentos. El eje X es hora de la semana (de 0 a 168) y el eje y es el compromiso que el post: enter image description here

ACTUALIZACIÓN: Los datos reales está muy desigualmente espaciados, por ejemplo, 4 puestos en la mañana, y ya puestos hasta la noche tarde. ¿Recomendaría usted para proceder con eso? Creo que el remuestreo conducirá a la pérdida de datos.

7voto

markymuy Puntos 21

Un enfoque simple para publicar en la hora de la ranura que usted espera recibir más le gusta.

Su descripción sugiere que el espera que el componente de la serie de tiempo es de temporada por horas del día.

Para ser más precisos, supongamos que la influencia es el multiplicativo. Una parametrización de la realización de ese modelo para 30 días es la siguiente.

Run Sequence of Likes

Si queremos normalizar y superposición de cada día, podemos realizar la regresión.

Trend

Como si por hacer trampa, hemos recuperado nuestro componente estacional.

Run Sequence of Seasonal Likes

El código.

import numpy as np
import pandas
from matplotlib import pyplot as plt
from sklearn.neighbors import KNeighborsRegressor


def generate_ts(hours=24, days=30):
    np.random.seed(123)
    # Generate some iid like data
    x = np.random.binomial(10, .5, hours * days)
    # Generate your trend
    slice = np.linspace(-np.pi, np.pi, hours)
    hourly_trend = np.round(np.cos(slice) * 5)
    hourly_trend -= hourly_trend.min()
    rep_hourly_trend = np.tile(hourly_trend, days)
    data = x * rep_hourly_trend
    # Generate a index
    ind = pandas.DatetimeIndex(freq='h',
                            start='2013-09-29 00:00:00',
                            periods=days * hours)
    return pandas.Series(data, index=ind), hourly_trend


def recover_trend(ts, hours=24, days=30):
    obs_trend = ts.values.reshape(-1, hours)
    obs_trend = (obs_trend.T - obs_trend.mean(axis=1)) / obs_trend.std(axis=1)
    y = obs_trend.ravel()
    x = (np.repeat(np.arange(hours), days)).reshape(-1, 1)
    model = KNeighborsRegressor()
    model.fit(x, y)
    rec_trend = model.predict(np.arange(hours).reshape(-1, 1))
    return x, y, rec_trend


def main():
    hours, days = 24, 30
    ts, true_trend = generate_ts(hours=hours, days=days)
    true_trend = (true_trend - true_trend.mean()) / true_trend.std()
    ts.plot()
    plt.title("Run Sequence Plot of Likes")
    plt.ylabel("Likes")
    plt.xlabel("Time")
    plt.show()
    x, y, rec_trend = recover_trend(ts, hours=hours, days=days)
    plt.scatter(x.ravel(), y, c='k', label='Observed Trend')
    plt.plot(np.arange(hours), rec_trend, 'g', label='Recovered Trend', linewidth=5)
    plt.plot(np.arange(hours), true_trend, 'r', label='True Trend', linewidth=5)
    plt.grid()
    plt.title("Trend Regression")
    plt.ylabel("Normalized Like Influence")
    plt.xlabel("Hours")
    plt.legend()
    plt.show()
    season_comp = pandas.Series(np.tile(rec_trend, days), index=ts.index)
    season_comp.plot()
    plt.title("Run Sequence Plot of Seasonal Component of Likes")
    plt.ylabel("Likes")
    plt.xlabel("Time")
    plt.show()


if __name__ == '__main__':
    main()

Antes de usar este, debo precaución que hay varias cuestiones.

  • Si hay un componente de tendencia, que deben ser tratados en primer lugar. Bajo orden de regresión polinomial o el gal operador son opciones populares.

  • La inspección cuidadosa de la autocorrelación y autocorrelación parcial de las parcelas puede revelar los componentes adicionales de la serie de tiempo a considerar.

  • Después de detrending su serie de tiempo, usted debe inspeccionar los residuos de estacionariedad.

  • No se da ninguna información sobre las distribuciones de los tiempos de que las publicaciones se hicieron en los datos recogidos.

  • Aunque puede parecer obvio que el óptimo de la publicación de el tiempo es anterior a la máxima de la recuperados tendencias de temporada, este puede no ser el caso.

  • El cambio de la publicación de el tiempo, puede cambiar la estacionalidad de los gustos.

  • La aglutinación de todos los puestos de la hora a la que recibe más le gusta, probablemente va a cambiar el comportamiento de los usuarios.

  • Este problema es más adecuado para el aprendizaje por refuerzo. El enfoque basado en principios es realizar secuencial de optimización de tiempo post por contextual de los bandidos.

2voto

Ying Xiao Puntos 1019

Parece que sólo importa el qué día de la semana y a qué hora del día es probable que obtener la mayor atención. Puede aplicar formato a los datos en horas de la semana, y tratar cada semana como un conjunto de observaciones, como usted ha hecho. A partir de aquí se puede calcular los datos derivados de espera que le gusta por hora de la semana. Si usted normalizar los datos, los gustos de cada hora respecto al total gusta para una semana le dará la probabilidad de que hora de la semana.

Usted puede retroceder en los datos, pero para utilizar un algoritmo de clustering como k-NN, o de una red neuronal para predecir sobre la base latente características, requiere que usted tenga más de una x y y. La adición de funciones como el tema general, tal vez algunos la frecuencia de los términos o análisis semántico, tal vez el formato de los post (imágenes o no, los enlaces o no, pregunta o no, etc.), le ofrecemos los datos de clúster. Es probable que usted necesite ajustar por la actividad general, y se necesitan muchas más semanas para adquirir cualquier tipo de confianza en el resultado.

Sin embargo, si usted consigue un buen conjunto de características y se puede quitar generales no relacionados tendencias en la actividad, que podría ser mejor servidos mediante la generación de un self organizing map (un tipo de red neuronal) en el que la hora de la semana es un nodo cuya respuesta se correlaciona mejor con un determinado conjunto de características. Una buena, sencilla implementación en Python está aquí. Entonces, cuando usted consigue un puesto específico y se descomponen en el conjunto de características, se puede ver que el nodo responde bien y post sobre que hora de la semana. Después, agregar la verdadera respuesta a los datos de su entrenamiento y volver a formar el mapa para incluir los nuevos datos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X