40 KiB
Пример использования библиотеки Featuretools для автоматического конструирования признаков¶
https://featuretools.alteryx.com/en/stable/getting_started/using_entitysets.html
Загрузка данных¶
За основу был взят набор данных "Ecommerce Orders Data Set" из Kaggle
Используется только 100 первых заказов и связанные с ними объекты
https://www.kaggle.com/datasets/sangamsharmait/ecommerce-orders-data-analysis
import pandas as pd
import featuretools as ft
from woodwork.logical_types import Categorical, Datetime
customers = pd.read_csv("data/orders/customers.csv")
sellers = pd.read_csv("data/orders/sellers.csv")
products = pd.read_csv("data/orders/products.csv")
orders = pd.read_csv("data/orders/orders.csv")
orders.fillna({"order_delivered_carrier_date": pd.to_datetime(
"1900-01-01 00:00:00"
)}, inplace=True)
orders.fillna(
{"order_delivered_customer_date": pd.to_datetime("1900-01-01 00:00:00")},
inplace=True,
)
order_items = pd.read_csv("data/orders/order_items.csv")
Создание сущностей в featuretools¶
Добавление dataframe'ов с данными в EntitySet с указанием параметров: название сущности (таблицы), первичный ключ, категориальные атрибуты (в том числе даты)
es = ft.EntitySet(id="orders")
es = es.add_dataframe(
dataframe_name="customers",
dataframe=customers,
index="customer_id",
logical_types={
"customer_unique_id": Categorical,
"customer_zip_code_prefix": Categorical,
"customer_city": Categorical,
"customer_state": Categorical,
},
)
es = es.add_dataframe(
dataframe_name="sellers",
dataframe=sellers,
index="seller_id",
logical_types={
"seller_zip_code_prefix": Categorical,
"seller_city": Categorical,
"seller_state": Categorical,
},
)
es = es.add_dataframe(
dataframe_name="products",
dataframe=products,
index="product_id",
logical_types={
"product_category_name": Categorical,
"product_name_lenght": Categorical,
"product_description_lenght": Categorical,
"product_photos_qty": Categorical,
},
)
es = es.add_dataframe(
dataframe_name="orders",
dataframe=orders,
index="order_id",
logical_types={
"order_status": Categorical,
"order_purchase_timestamp": Datetime,
"order_approved_at": Datetime,
"order_delivered_carrier_date": Datetime,
"order_delivered_customer_date": Datetime,
"order_estimated_delivery_date": Datetime,
},
)
es = es.add_dataframe(
dataframe_name="order_items",
dataframe=order_items,
index="orderitem_id",
make_index=True,
logical_types={"shipping_limit_date": Datetime},
)
es
Настройка связей между сущностями featuretools¶
Настройка связей между таблицами на уровне ключей
Связь указывается от родителя к потомкам (таблица-родитель, первичный ключ, таблица-потомок, внешний ключ)
es = es.add_relationship("customers", "customer_id", "orders", "customer_id")
es = es.add_relationship("orders", "order_id", "order_items", "order_id")
es = es.add_relationship("products", "product_id", "order_items", "product_id")
es = es.add_relationship("sellers", "seller_id", "order_items", "seller_id")
es
Автоматическое конструирование признаков с помощью featuretools¶
Библиотека применят различные функции агрегации к атрибутам таблицы order_items с учетом отношений
Результат помещается в Dataframe feature_matrix
feature_matrix, feature_defs = ft.dfs(
entityset=es,
target_dataframe_name="order_items",
agg_primitives=["mean", "count", "mode", "any"],
trans_primitives=["hour", "weekday"],
max_depth=2,
)
feature_matrix
Полученные признаки¶
Список колонок полученного dataframe'а
feature_defs