Как time_since_previous вычисляется в featuretools? - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь воспроизвести учебник FeatureTools (см. Ссылку ниже). Я использую данные издевательства, представленные в пакете. Они включают в себя таблицу клиентов и сессионный стол. У каждого клиента много сессий. Каждый сеанс имеет отметку времени session_start . Я вычисляю среднее значение примитива time_since_previous функции session_start a), используя featuretools и b) вручную. Но я получаю разные результаты, где я ошибаюсь?

a) Расчет с использованием featuretools:

import featuretools as ft

es = ft.demo.load_mock_customer(return_entityset=True)
feature_matrix, features_defs = ft.dfs(
    entityset=es,
    target_entity='customers',
    agg_primitives=['mean'],
    trans_primitives=['time_since_previous'])

MEAN (sessions.TIME_SINCE_PREVIOUS (session_start)) для клиента 3 - 888.333333

б) Ручной расчет:

time_since_previous(sessions[sessions.customer_id == 3].session_start).tolist()
[nan, 10075.0, 3900.0, 1625.0, 8710.0, 1170.0]
statistics.mean([ 10075.0, 3900.0, 1625.0, 8710.0, 1170.0])
5096.0

Снимок1 Снимок2

https://docs.featuretools.com/en/stable/automated_feature_engineering/primitives.html

1 Ответ

0 голосов
/ 21 февраля 2020

Чтобы применить time_since_previous для каждого клиента, вы можете использовать groupby_trans_primitives в DFS.

fm, fd = ft.dfs(
    entityset=es,
    target_entity='customers',
    agg_primitives=['mean'],
    groupby_trans_primitives=['time_since_previous'],
)

fm.filter(regex='sessions.TIME_SINCE_PREVIOUS')
             MEAN(sessions.TIME_SINCE_PREVIOUS(session_start) by customer_id)
customer_id                                                                  
5                                                  5577.000000               
4                                                  2516.428571               
1                                                  3305.714286               
3                                                  5096.000000               
2                                                  4907.500000               

Дайте мне знать, если это поможет.

...