2017-10-11 8 views
0

Je souhaite effectuer une validation croisée de séries temporelles basée sur le groupe (colonne GRP). Dans les données ci-dessous de l'échantillon, la température est ma variable cibleStratifié Validation croisée des données de timesérie

import numpy as np 
import pandas as pd 
timeS=pd.date_range(start='1980-01-01 00:00:00', end='1980-01-01 00:00:05', 
freq='S') 
df = pd.DataFrame(dict(time=timeS, grp=['A']*3 + ['B']*3, material=[1,2,3]*2, 
temperature=['2.4','5','9.9']*2)) 


    grp material temperature time 
0 A 1  2.4    1980-01-01 00:00:00 
1 A 2  5     1980-01-01 00:00:01 
2 A 3  9.9    1980-01-01 00:00:02 
3 B 1  2.4    1980-01-01 00:00:03 
4 B 2  5     1980-01-01 00:00:04 
5 B 3  9.9    1980-01-01 00:00:05 

je suis planing d'ajouter quelques fonctionnalités de retard sur la base grp en utilisant ce code.

df.groupby("grp")['temperature'].shift(-1) 
0  5 
1 9.9 
2 NaN 
3  5 
4 9.9 
5 NaN 
Name: temperature, dtype: object 

Le problème maintenant j'ai quand je fais est la validation croisée je peux utiliser cette fonction de sklearn sklearn.model_selection.TimeSeriesSplit mais il ne prend pas en considération l'effet de groupe. Quelqu'un peut-il me dire comment faire la division de CV par groupe (comme la division stratifiée)? Je vais utiliser xgboost.cv pour cv si cela aide.

Editer: Changements de temps par groupe. Temps augmente uniformément (par seconde) au sein du groupe

Répondre

0

Les éléments suivants doivent faire:

series = Series.from_csv('yourfile.csv', header=0) 
    X = series.values 
    n_train = 500 
    n_records = len(X) 
    for i in range(n_train, n_records): 
     train, test = X[0:i], X[i:i+1] 
     print('train=%d, test=%d' % (len(train), len(test)))