import featureform as ff
postgres = ff.register_postgres(
name="postgres-quickstart",
host="host.docker.internal",
port="5432",
user="postgres",
password="password",
database="postgres",
tags=["primary_training_data"],
properties={"next_key_rotation": "2023-05-31"},
)
redis = ff.register_redis(
name="redis-quickstart",
host="host.docker.internal",
port=6379,
tags=["primary_inference_store"],
)
transactions = postgres.register_table(
name="transactions",
table="Transactions",
tags=["pii_data"],
)
@postgres.sql_transformation(tags=["avg_aggregation"])
def average_user_transaction():
return (
"SELECT CustomerID as user_id, avg(TransactionAmount) "
"as avg_transaction_amt from {{transactions.default}} GROUP BY user_id"
)
user = ff.register_entity("user", tags=["transactions_pk"])
# Register a column from our transformation as a feature
average_user_transaction.register_resources(
entity=user,
entity_column="user_id",
inference_store=redis,
features=[
{
"name": "avg_transactions",
"column": "avg_transaction_amt",
"type": "float32",
"tags": ["transactions_v1", "pii_data"],
"properties": {"ready_for_training": "yes"},
},
],
)
# Register label from our base Transactions table
transactions.register_resources(
entity=user,
entity_column="customerid",
labels=[
{
"name": "fraudulent",
"column": "isfraud",
"type": "bool",
"tags": ["transactions_v1", "pii_data"],
"properties": {"ready_for_training": "yes"},
},
],
)
ff.register_training_set(
"fraud_training", label="fraudulent", features=["avg_transactions"], tags=["transactions_v1", "pii_data"]
)