11. Create Calendar Window Aggregates from Time Series
Creating Features with Monthly Calendar Windows¶
In this step, we define by aggregating monthly records from the CREDIT_CARD_MONTHLY_BALANCE and INSTALLMENTS_PAYMENTS tables within 6-month, 12-month and 24-month calendar windows.
Calendar aggregations windows are required for Time Series while for event table they are recommended only when the event is a monthly regular event and the feature job setting is a CRON setting.
Activate catalog¶
In [1]:
                Copied!
                
                
            import featurebyte as fb
# Set your profile to the tutorial environment
fb.use_profile("tutorial")
catalog_name = "Loan Applications Dataset SDK Tutorial"
catalog = fb.Catalog.activate(catalog_name)
import featurebyte as fb
# Set your profile to the tutorial environment
fb.use_profile("tutorial")
catalog_name = "Loan Applications Dataset SDK Tutorial"
catalog = fb.Catalog.activate(catalog_name)  
    
        14:10:28 | INFO | SDK version: 3.0.1.dev45 INFO :featurebyte:SDK version: 3.0.1.dev45 14:10:28 | INFO | No catalog activated. INFO :featurebyte:No catalog activated. 14:10:28 | INFO | Using profile: tutorial INFO :featurebyte:Using profile: tutorial 14:10:29 | INFO | Using configuration file at: /Users/gxav/.featurebyte/config.yaml INFO :featurebyte:Using configuration file at: /Users/gxav/.featurebyte/config.yaml 14:10:29 | INFO | Active profile: tutorial (https://tutorials.featurebyte.com/api/v1) INFO :featurebyte:Active profile: tutorial (https://tutorials.featurebyte.com/api/v1) 14:10:29 | INFO | SDK version: 3.0.1.dev45 INFO :featurebyte:SDK version: 3.0.1.dev45 14:10:29 | INFO | No catalog activated. INFO :featurebyte:No catalog activated. 14:10:29 | INFO | Catalog activated: Loan Applications Dataset SDK Tutorial INFO :featurebyte.api.catalog:Catalog activated: Loan Applications Dataset SDK Tutorial
Get view from table¶
In [2]:
                Copied!
                
                
            # Get view from CREDIT_CARD_MONTHLY_BALANCE time series table.
credit_card_monthly_balance_view = catalog.get_view("CREDIT_CARD_MONTHLY_BALANCE")
# Get view from CREDIT_CARD_MONTHLY_BALANCE time series table.
credit_card_monthly_balance_view = catalog.get_view("CREDIT_CARD_MONTHLY_BALANCE")
    
        In [3]:
                Copied!
                
                
            # Get view from INSTALLMENTS_PAYMENTS event table.
installments_payments_view = catalog.get_view("INSTALLMENTS_PAYMENTS")
# Get view from INSTALLMENTS_PAYMENTS event table.
installments_payments_view = catalog.get_view("INSTALLMENTS_PAYMENTS")
    
        In [4]:
                Copied!
                
                
            # Get view from PREVIOUS_APPLICATION event table.
previous_application_view = catalog.get_view("PREVIOUS_APPLICATION")
# Get view from PREVIOUS_APPLICATION event table.
previous_application_view = catalog.get_view("PREVIOUS_APPLICATION")
    
        Create ratio column¶
In [5]:
                Copied!
                
                
            previous_application_view["AMT_ANNUITY To AMT_CREDIT"] = (
    previous_application_view["AMT_ANNUITY"] / previous_application_view["AMT_CREDIT"]
)
previous_application_view["AMT_ANNUITY To AMT_CREDIT"] = (
    previous_application_view["AMT_ANNUITY"] / previous_application_view["AMT_CREDIT"]
)
    
        Derive new column¶
In [6]:
                Copied!
                
                
            credit_card_monthly_balance_view["Available Credit"] = (
    credit_card_monthly_balance_view["AMT_CREDIT_LIMIT_ACTUAL"] - credit_card_monthly_balance_view["AMT_BALANCE"]
)
credit_card_monthly_balance_view["Available Credit"] = (
    credit_card_monthly_balance_view["AMT_CREDIT_LIMIT_ACTUAL"] - credit_card_monthly_balance_view["AMT_BALANCE"]
)
    
        In [7]:
                Copied!
                
                
            installments_payments_view["Days_Difference_Actual_vs_Scheduled"] = (
    installments_payments_view["actual_installment_date"] - installments_payments_view["scheduled_installment_date"]
).dt.day
installments_payments_view["Days_Difference_Actual_vs_Scheduled"] = (
    installments_payments_view["actual_installment_date"] - installments_payments_view["scheduled_installment_date"]
).dt.day
    
        Join views¶
In [8]:
                Copied!
                
                
            # Join PREVIOUS_APPLICATION view to INSTALLMENTS_PAYMENTS view.
installments_payments_view = installments_payments_view.join(previous_application_view, rprefix="PriorApplication_")
# Join PREVIOUS_APPLICATION view to INSTALLMENTS_PAYMENTS view.
installments_payments_view = installments_payments_view.join(previous_application_view, rprefix="PriorApplication_")
    
        Do window aggregation from CREDIT_CARD_MONTHLY_BALANCE¶
See SDK reference for features
See SDK reference to groupby a view
See SDK reference to do aggregation over time
In [9]:
                Copied!
                
                
            # Group CREDIT_CARD_MONTHLY_BALANCE view by Client entity (ClientID).
credit_card_monthly_balance_view_by_client = credit_card_monthly_balance_view.groupby(["ClientID"])
# Group CREDIT_CARD_MONTHLY_BALANCE view by Client entity (ClientID).
credit_card_monthly_balance_view_by_client = credit_card_monthly_balance_view.groupby(["ClientID"])
    
        In [10]:
                Copied!
                
                
            # Get Std of CNT_DRAWINGS_CURRENT for the Client over time.
client_std_of_credit_card_monthly_balance_records_cnt_drawings_atm_currents_24cmo = (
    credit_card_monthly_balance_view_by_client.aggregate_over(
        "CNT_DRAWINGS_ATM_CURRENT",
        method="std",
        feature_names=["CLIENT_Std_of_Credit_card_monthly_balance_records_CNT_DRAWINGS_ATM_CURRENTs_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Std_of_Credit_card_monthly_balance_records_CNT_DRAWINGS_ATM_CURRENTs_24cMo"]
)
# Get Std of CNT_DRAWINGS_CURRENT for the Client over time.
client_std_of_credit_card_monthly_balance_records_cnt_drawings_atm_currents_24cmo = (
    credit_card_monthly_balance_view_by_client.aggregate_over(
        "CNT_DRAWINGS_ATM_CURRENT",
        method="std",
        feature_names=["CLIENT_Std_of_Credit_card_monthly_balance_records_CNT_DRAWINGS_ATM_CURRENTs_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Std_of_Credit_card_monthly_balance_records_CNT_DRAWINGS_ATM_CURRENTs_24cMo"]
)
    
        In [11]:
                Copied!
                
                
            # Get Min of Available Credit for the Client over time.
client_min_of_credit_card_monthly_balance_records_available_credits_6cmo = (
    credit_card_monthly_balance_view_by_client.aggregate_over(
        "Available Credit",
        method="min",
        feature_names=["CLIENT_Min_of_Credit_card_monthly_balance_records_Available_Credits_6cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=6)],
    )["CLIENT_Min_of_Credit_card_monthly_balance_records_Available_Credits_6cMo"]
)
# Get Min of Available Credit for the Client over time.
client_min_of_credit_card_monthly_balance_records_available_credits_6cmo = (
    credit_card_monthly_balance_view_by_client.aggregate_over(
        "Available Credit",
        method="min",
        feature_names=["CLIENT_Min_of_Credit_card_monthly_balance_records_Available_Credits_6cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=6)],
    )["CLIENT_Min_of_Credit_card_monthly_balance_records_Available_Credits_6cMo"]
)
    
        Do window aggregation from INSTALLMENTS_PAYMENTS¶
See SDK reference for features
See SDK reference to groupby a view
See SDK reference to do aggregation over time
In [12]:
                Copied!
                
                
            # Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID).
installments_payments_view_by_client = installments_payments_view.groupby(["PriorApplication_ClientID"])
# Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID).
installments_payments_view_by_client = installments_payments_view.groupby(["PriorApplication_ClientID"])
    
        In [13]:
                Copied!
                
                
            # Get Min of AMT_PAYMENT for the Client over time.
client_min_of_installments_amt_payments_24cmo = installments_payments_view_by_client.aggregate_over(
    "AMT_PAYMENT",
    method="min",
    feature_names=["CLIENT_Min_of_Installments_AMT_PAYMENTs_24cMo"],
    windows=[fb.CalendarWindow(unit="MONTH", size=24)],
)["CLIENT_Min_of_Installments_AMT_PAYMENTs_24cMo"]
# Get Min of AMT_PAYMENT for the Client over time.
client_min_of_installments_amt_payments_24cmo = installments_payments_view_by_client.aggregate_over(
    "AMT_PAYMENT",
    method="min",
    feature_names=["CLIENT_Min_of_Installments_AMT_PAYMENTs_24cMo"],
    windows=[fb.CalendarWindow(unit="MONTH", size=24)],
)["CLIENT_Min_of_Installments_AMT_PAYMENTs_24cMo"]
    
        In [14]:
                Copied!
                
                
            # Get Max of Days_Difference_Actual_vs_Scheduled for the Client over time.
client_max_of_installments_days_difference_actual_vs_scheduleds_24cmo = (
    installments_payments_view_by_client.aggregate_over(
        "Days_Difference_Actual_vs_Scheduled",
        method="max",
        feature_names=["CLIENT_Max_of_Installments_Days_Difference_Actual_vs_Scheduleds_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Max_of_Installments_Days_Difference_Actual_vs_Scheduleds_24cMo"]
)
# Get Max of Days_Difference_Actual_vs_Scheduled for the Client over time.
client_max_of_installments_days_difference_actual_vs_scheduleds_24cmo = (
    installments_payments_view_by_client.aggregate_over(
        "Days_Difference_Actual_vs_Scheduled",
        method="max",
        feature_names=["CLIENT_Max_of_Installments_Days_Difference_Actual_vs_Scheduleds_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Max_of_Installments_Days_Difference_Actual_vs_Scheduleds_24cMo"]
)
    
        In [15]:
                Copied!
                
                
            # Get Max of PriorApplication_AMT_ANNUITY To AMT_CREDIT for the Client over time.
client_max_of_installments_priorapplication_amt_annuity_to_amt_credits_6cmo = (
    installments_payments_view_by_client.aggregate_over(
        "PriorApplication_AMT_ANNUITY To AMT_CREDIT",
        method="max",
        feature_names=["CLIENT_Max_of_Installments_PriorApplication_AMT_ANNUITY_To_AMT_CREDITs_6cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=6)],
    )["CLIENT_Max_of_Installments_PriorApplication_AMT_ANNUITY_To_AMT_CREDITs_6cMo"]
)
# Get Max of PriorApplication_AMT_ANNUITY To AMT_CREDIT for the Client over time.
client_max_of_installments_priorapplication_amt_annuity_to_amt_credits_6cmo = (
    installments_payments_view_by_client.aggregate_over(
        "PriorApplication_AMT_ANNUITY To AMT_CREDIT",
        method="max",
        feature_names=["CLIENT_Max_of_Installments_PriorApplication_AMT_ANNUITY_To_AMT_CREDITs_6cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=6)],
    )["CLIENT_Max_of_Installments_PriorApplication_AMT_ANNUITY_To_AMT_CREDITs_6cMo"]
)
    
        In [16]:
                Copied!
                
                
            # Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID) across different
# INSTALLMENT_STATUSs.
installments_payments_view_by_client_across_installment_statuss = installments_payments_view.groupby(
    ["PriorApplication_ClientID"], category="INSTALLMENT_STATUS"
)
# Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID) across different
# INSTALLMENT_STATUSs.
installments_payments_view_by_client_across_installment_statuss = installments_payments_view.groupby(
    ["PriorApplication_ClientID"], category="INSTALLMENT_STATUS"
)
    
        In [17]:
                Copied!
                
                
            # Distribution of the total AMT_PAYMENTs of Installments, segmented by INSTALLMENT_STATUS for the
# Client over time.
client_installments_amt_payments_by_installment_status_6cmo = (
    installments_payments_view_by_client_across_installment_statuss.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_INSTALLMENT_STATUS_6cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=6)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_INSTALLMENT_STATUS_6cMo"]
)
# Distribution of the total AMT_PAYMENTs of Installments, segmented by INSTALLMENT_STATUS for the
# Client over time.
client_installments_amt_payments_by_installment_status_6cmo = (
    installments_payments_view_by_client_across_installment_statuss.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_INSTALLMENT_STATUS_6cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=6)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_INSTALLMENT_STATUS_6cMo"]
)
    
        In [18]:
                Copied!
                
                
            # Distribution of the total AMT_PAYMENTs of Installments, segmented by INSTALLMENT_STATUS for the
# Client over time.
client_installments_amt_payments_by_installment_status_12cmo = (
    installments_payments_view_by_client_across_installment_statuss.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_INSTALLMENT_STATUS_12cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=12)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_INSTALLMENT_STATUS_12cMo"]
)
# Distribution of the total AMT_PAYMENTs of Installments, segmented by INSTALLMENT_STATUS for the
# Client over time.
client_installments_amt_payments_by_installment_status_12cmo = (
    installments_payments_view_by_client_across_installment_statuss.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_INSTALLMENT_STATUS_12cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=12)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_INSTALLMENT_STATUS_12cMo"]
)
    
        In [19]:
                Copied!
                
                
            # Count Installments across different INSTALLMENT_STATUSs for the Client over time.
client_count_of_installments_by_installment_status_24cmo = (
    installments_payments_view_by_client_across_installment_statuss.aggregate_over(
        None,
        method="count",
        feature_names=["CLIENT_Count_of_Installments_by_INSTALLMENT_STATUS_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Count_of_Installments_by_INSTALLMENT_STATUS_24cMo"]
)
# Count Installments across different INSTALLMENT_STATUSs for the Client over time.
client_count_of_installments_by_installment_status_24cmo = (
    installments_payments_view_by_client_across_installment_statuss.aggregate_over(
        None,
        method="count",
        feature_names=["CLIENT_Count_of_Installments_by_INSTALLMENT_STATUS_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Count_of_Installments_by_INSTALLMENT_STATUS_24cMo"]
)
    
        In [20]:
                Copied!
                
                
            # Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID) across different
# PriorApplication_PAYMENT_TYPEs.
installments_payments_view_by_client_across_priorapplication_payment_types = installments_payments_view.groupby(
    ["PriorApplication_ClientID"], category="PriorApplication_PAYMENT_TYPE"
)
# Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID) across different
# PriorApplication_PAYMENT_TYPEs.
installments_payments_view_by_client_across_priorapplication_payment_types = installments_payments_view.groupby(
    ["PriorApplication_ClientID"], category="PriorApplication_PAYMENT_TYPE"
)
    
        In [21]:
                Copied!
                
                
            # Distribution of the total AMT_PAYMENTs of Installments, segmented by
# PriorApplication_PAYMENT_TYPE for the Client over time.
client_installments_amt_payments_by_priorapplication_payment_type_24cmo = (
    installments_payments_view_by_client_across_priorapplication_payment_types.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_PAYMENT_TYPE_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_PAYMENT_TYPE_24cMo"]
)
# Distribution of the total AMT_PAYMENTs of Installments, segmented by
# PriorApplication_PAYMENT_TYPE for the Client over time.
client_installments_amt_payments_by_priorapplication_payment_type_24cmo = (
    installments_payments_view_by_client_across_priorapplication_payment_types.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_PAYMENT_TYPE_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_PAYMENT_TYPE_24cMo"]
)
    
        In [22]:
                Copied!
                
                
            # Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID) across different
# PriorApplication_CLIENT_TYPEs.
installments_payments_view_by_client_across_priorapplication_client_types = installments_payments_view.groupby(
    ["PriorApplication_ClientID"], category="PriorApplication_CLIENT_TYPE"
)
# Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID) across different
# PriorApplication_CLIENT_TYPEs.
installments_payments_view_by_client_across_priorapplication_client_types = installments_payments_view.groupby(
    ["PriorApplication_ClientID"], category="PriorApplication_CLIENT_TYPE"
)
    
        In [23]:
                Copied!
                
                
            # Distribution of the total AMT_PAYMENTs of Installments, segmented by PriorApplication_CLIENT_TYPE
# for the Client over time.
client_installments_amt_payments_by_priorapplication_client_type_24cmo = (
    installments_payments_view_by_client_across_priorapplication_client_types.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_CLIENT_TYPE_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_CLIENT_TYPE_24cMo"]
)
# Distribution of the total AMT_PAYMENTs of Installments, segmented by PriorApplication_CLIENT_TYPE
# for the Client over time.
client_installments_amt_payments_by_priorapplication_client_type_24cmo = (
    installments_payments_view_by_client_across_priorapplication_client_types.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_CLIENT_TYPE_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_CLIENT_TYPE_24cMo"]
)
    
        In [24]:
                Copied!
                
                
            # Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID) across different
# PriorApplication_YIELD_GROUPs.
installments_payments_view_by_client_across_priorapplication_yield_groups = installments_payments_view.groupby(
    ["PriorApplication_ClientID"], category="PriorApplication_YIELD_GROUP"
)
# Group INSTALLMENTS_PAYMENTS view by Client entity (PriorApplication_ClientID) across different
# PriorApplication_YIELD_GROUPs.
installments_payments_view_by_client_across_priorapplication_yield_groups = installments_payments_view.groupby(
    ["PriorApplication_ClientID"], category="PriorApplication_YIELD_GROUP"
)
    
        In [25]:
                Copied!
                
                
            # Distribution of the total AMT_PAYMENTs of Installments, segmented by PriorApplication_YIELD_GROUP
# for the Client over time.
client_installments_amt_payments_by_priorapplication_yield_group_24cmo = (
    installments_payments_view_by_client_across_priorapplication_yield_groups.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_YIELD_GROUP_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_YIELD_GROUP_24cMo"]
)
# Distribution of the total AMT_PAYMENTs of Installments, segmented by PriorApplication_YIELD_GROUP
# for the Client over time.
client_installments_amt_payments_by_priorapplication_yield_group_24cmo = (
    installments_payments_view_by_client_across_priorapplication_yield_groups.aggregate_over(
        "AMT_PAYMENT",
        method="sum",
        feature_names=["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_YIELD_GROUP_24cMo"],
        windows=[fb.CalendarWindow(unit="MONTH", size=24)],
    )["CLIENT_Installments_AMT_PAYMENTs_by_PriorApplication_YIELD_GROUP_24cMo"]
)
    
        Derive feature from aggregation across categories¶
In [26]:
                Copied!
                
                
            # Get Entropy of count of Installments by INSTALLMENT_STATUS from
# CLIENT_Count_of_Installments_by_INSTALLMENT_STATUS_24cMo
client_entropy_of_count_of_installments_by_installment_status_24cmo = (
    client_count_of_installments_by_installment_status_24cmo.cd.entropy()
)
# Give a name to new feature
client_entropy_of_count_of_installments_by_installment_status_24cmo.name = (
    "CLIENT_Entropy_of_count_of_Installments_by_INSTALLMENT_STATUS_24cMo"
)
# Get Entropy of count of Installments by INSTALLMENT_STATUS from
# CLIENT_Count_of_Installments_by_INSTALLMENT_STATUS_24cMo
client_entropy_of_count_of_installments_by_installment_status_24cmo = (
    client_count_of_installments_by_installment_status_24cmo.cd.entropy()
)
# Give a name to new feature
client_entropy_of_count_of_installments_by_installment_status_24cmo.name = (
    "CLIENT_Entropy_of_count_of_Installments_by_INSTALLMENT_STATUS_24cMo"
)
    
        In [27]:
                Copied!
                
                
            fb.FeatureGroup(
    [
        client_std_of_credit_card_monthly_balance_records_cnt_drawings_atm_currents_24cmo,
        client_min_of_credit_card_monthly_balance_records_available_credits_6cmo,
        client_max_of_installments_priorapplication_amt_annuity_to_amt_credits_6cmo,
        client_max_of_installments_days_difference_actual_vs_scheduleds_24cmo,
        client_min_of_installments_amt_payments_24cmo,
        client_installments_amt_payments_by_priorapplication_yield_group_24cmo,
        client_installments_amt_payments_by_priorapplication_payment_type_24cmo,
        client_installments_amt_payments_by_priorapplication_client_type_24cmo,
        client_installments_amt_payments_by_installment_status_6cmo,
        client_installments_amt_payments_by_installment_status_12cmo,
        client_entropy_of_count_of_installments_by_installment_status_24cmo,
    ]
).save()
fb.FeatureGroup(
    [
        client_std_of_credit_card_monthly_balance_records_cnt_drawings_atm_currents_24cmo,
        client_min_of_credit_card_monthly_balance_records_available_credits_6cmo,
        client_max_of_installments_priorapplication_amt_annuity_to_amt_credits_6cmo,
        client_max_of_installments_days_difference_actual_vs_scheduleds_24cmo,
        client_min_of_installments_amt_payments_24cmo,
        client_installments_amt_payments_by_priorapplication_yield_group_24cmo,
        client_installments_amt_payments_by_priorapplication_payment_type_24cmo,
        client_installments_amt_payments_by_priorapplication_client_type_24cmo,
        client_installments_amt_payments_by_installment_status_6cmo,
        client_installments_amt_payments_by_installment_status_12cmo,
        client_entropy_of_count_of_installments_by_installment_status_24cmo,
    ]
).save()
    
        Done! |████████████████████████████████████████| 100% in 9.1s (0.11%/s) Done! |████████████████████████████████████████| 100% in 6.2s (0.16%/s) Loading Feature(s) |████████████████████████████████████████| 11/11 [100%] in 0.
Update feature type¶
In [28]:
                Copied!
                
                
            # Update feature type
client_std_of_credit_card_monthly_balance_records_cnt_drawings_atm_currents_24cmo.update_feature_type("numeric")
# Update feature type
client_std_of_credit_card_monthly_balance_records_cnt_drawings_atm_currents_24cmo.update_feature_type("numeric")
    
        In [29]:
                Copied!
                
                
            # Update feature type
client_min_of_credit_card_monthly_balance_records_available_credits_6cmo.update_feature_type("numeric")
# Update feature type
client_min_of_credit_card_monthly_balance_records_available_credits_6cmo.update_feature_type("numeric")
    
        In [30]:
                Copied!
                
                
            # Update feature type
client_max_of_installments_priorapplication_amt_annuity_to_amt_credits_6cmo.update_feature_type("numeric")
# Update feature type
client_max_of_installments_priorapplication_amt_annuity_to_amt_credits_6cmo.update_feature_type("numeric")
    
        In [31]:
                Copied!
                
                
            # Update feature type
client_max_of_installments_days_difference_actual_vs_scheduleds_24cmo.update_feature_type("numeric")
# Update feature type
client_max_of_installments_days_difference_actual_vs_scheduleds_24cmo.update_feature_type("numeric")
    
        In [32]:
                Copied!
                
                
            # Update feature type
client_min_of_installments_amt_payments_24cmo.update_feature_type("numeric")
# Update feature type
client_min_of_installments_amt_payments_24cmo.update_feature_type("numeric")
    
        In [33]:
                Copied!
                
                
            # Update feature type
client_installments_amt_payments_by_priorapplication_yield_group_24cmo.update_feature_type("dictionary")
# Update feature type
client_installments_amt_payments_by_priorapplication_yield_group_24cmo.update_feature_type("dictionary")
    
        In [34]:
                Copied!
                
                
            # Update feature type
client_installments_amt_payments_by_priorapplication_payment_type_24cmo.update_feature_type("dictionary")
# Update feature type
client_installments_amt_payments_by_priorapplication_payment_type_24cmo.update_feature_type("dictionary")
    
        In [35]:
                Copied!
                
                
            # Update feature type
client_installments_amt_payments_by_priorapplication_client_type_24cmo.update_feature_type("dictionary")
# Update feature type
client_installments_amt_payments_by_priorapplication_client_type_24cmo.update_feature_type("dictionary")
    
        In [36]:
                Copied!
                
                
            # Update feature type
client_installments_amt_payments_by_installment_status_6cmo.update_feature_type("dictionary")
# Update feature type
client_installments_amt_payments_by_installment_status_6cmo.update_feature_type("dictionary")
    
        In [37]:
                Copied!
                
                
            # Update feature type
client_installments_amt_payments_by_installment_status_12cmo.update_feature_type("dictionary")
# Update feature type
client_installments_amt_payments_by_installment_status_12cmo.update_feature_type("dictionary")
    
        In [38]:
                Copied!
                
                
            # Update feature type
client_entropy_of_count_of_installments_by_installment_status_24cmo.update_feature_type("numeric")
# Update feature type
client_entropy_of_count_of_installments_by_installment_status_24cmo.update_feature_type("numeric")
    
        Add description¶
In [39]:
                Copied!
                
                
            # Add description
client_std_of_credit_card_monthly_balance_records_cnt_drawings_atm_currents_24cmo.update_description(
    "Std of Credit_card_monthly_balance_records CNT_DRAWINGS_ATM_CURRENTs for "
    "the Client over a 24 calendar months period."
)
# Add description
client_std_of_credit_card_monthly_balance_records_cnt_drawings_atm_currents_24cmo.update_description(
    "Std of Credit_card_monthly_balance_records CNT_DRAWINGS_ATM_CURRENTs for "
    "the Client over a 24 calendar months period."
)
    
        In [40]:
                Copied!
                
                
            # Add description
client_min_of_credit_card_monthly_balance_records_available_credits_6cmo.update_description(
    "Min of Credit_card_monthly_balance_records Available Credits for the " "Client over a 6 calendar months period."
)
# Add description
client_min_of_credit_card_monthly_balance_records_available_credits_6cmo.update_description(
    "Min of Credit_card_monthly_balance_records Available Credits for the " "Client over a 6 calendar months period."
)
    
        In [41]:
                Copied!
                
                
            # Add description
client_max_of_installments_priorapplication_amt_annuity_to_amt_credits_6cmo.update_description(
    "Max of Installments PriorApplication_AMT_ANNUITY To AMT_CREDITs for the Client over a 6 calendar months period."
)
# Add description
client_max_of_installments_priorapplication_amt_annuity_to_amt_credits_6cmo.update_description(
    "Max of Installments PriorApplication_AMT_ANNUITY To AMT_CREDITs for the Client over a 6 calendar months period."
)
    
        In [42]:
                Copied!
                
                
            # Add description
client_max_of_installments_days_difference_actual_vs_scheduleds_24cmo.update_description(
    "Max of Installments Days_Difference_Actual_vs_Scheduleds for the Client over a 24 calendar months period."
)
# Add description
client_max_of_installments_days_difference_actual_vs_scheduleds_24cmo.update_description(
    "Max of Installments Days_Difference_Actual_vs_Scheduleds for the Client over a 24 calendar months period."
)
    
        In [43]:
                Copied!
                
                
            # Add description
client_min_of_installments_amt_payments_24cmo.update_description(
    "Min of Installments AMT_PAYMENTs for the Client over a 24 calendar months period."
)
# Add description
client_min_of_installments_amt_payments_24cmo.update_description(
    "Min of Installments AMT_PAYMENTs for the Client over a 24 calendar months period."
)
    
        In [44]:
                Copied!
                
                
            # Add description
client_installments_amt_payments_by_priorapplication_yield_group_24cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "PriorApplication_YIELD_GROUP for the Client over a 24 calendar months "
    "period. It provides a detailed breakdown in the form of a dictionary, "
    "where each key represents a unique PriorApplication_YIELD_GROUP. The "
    "corresponding value for each key is the cumulative sum of AMT_PAYMENTs"
    " within that PriorApplication_YIELD_GROUP. This distribution offers "
    "insights into the AMT_PAYMENT spread across different "
    "PriorApplication_YIELD_GROUPs for the Client."
)
# Add description
client_installments_amt_payments_by_priorapplication_yield_group_24cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "PriorApplication_YIELD_GROUP for the Client over a 24 calendar months "
    "period. It provides a detailed breakdown in the form of a dictionary, "
    "where each key represents a unique PriorApplication_YIELD_GROUP. The "
    "corresponding value for each key is the cumulative sum of AMT_PAYMENTs"
    " within that PriorApplication_YIELD_GROUP. This distribution offers "
    "insights into the AMT_PAYMENT spread across different "
    "PriorApplication_YIELD_GROUPs for the Client."
)
    
        In [45]:
                Copied!
                
                
            # Add description
client_installments_amt_payments_by_priorapplication_payment_type_24cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "PriorApplication_PAYMENT_TYPE for the Client over a 24 calendar months"
    " period. It provides a detailed breakdown in the form of a dictionary,"
    " where each key represents a unique PriorApplication_PAYMENT_TYPE. The"
    " corresponding value for each key is the cumulative sum of "
    "AMT_PAYMENTs within that PriorApplication_PAYMENT_TYPE. This "
    "distribution offers insights into the AMT_PAYMENT spread across "
    "different PriorApplication_PAYMENT_TYPEs for the Client."
)
# Add description
client_installments_amt_payments_by_priorapplication_payment_type_24cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "PriorApplication_PAYMENT_TYPE for the Client over a 24 calendar months"
    " period. It provides a detailed breakdown in the form of a dictionary,"
    " where each key represents a unique PriorApplication_PAYMENT_TYPE. The"
    " corresponding value for each key is the cumulative sum of "
    "AMT_PAYMENTs within that PriorApplication_PAYMENT_TYPE. This "
    "distribution offers insights into the AMT_PAYMENT spread across "
    "different PriorApplication_PAYMENT_TYPEs for the Client."
)
    
        In [46]:
                Copied!
                
                
            # Add description
client_installments_amt_payments_by_priorapplication_client_type_24cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "PriorApplication_CLIENT_TYPE for the Client over a 24 calendar months "
    "period. It provides a detailed breakdown in the form of a dictionary, "
    "where each key represents a unique PriorApplication_CLIENT_TYPE. The "
    "corresponding value for each key is the cumulative sum of AMT_PAYMENTs"
    " within that PriorApplication_CLIENT_TYPE. This distribution offers "
    "insights into the AMT_PAYMENT spread across different "
    "PriorApplication_CLIENT_TYPEs for the Client."
)
# Add description
client_installments_amt_payments_by_priorapplication_client_type_24cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "PriorApplication_CLIENT_TYPE for the Client over a 24 calendar months "
    "period. It provides a detailed breakdown in the form of a dictionary, "
    "where each key represents a unique PriorApplication_CLIENT_TYPE. The "
    "corresponding value for each key is the cumulative sum of AMT_PAYMENTs"
    " within that PriorApplication_CLIENT_TYPE. This distribution offers "
    "insights into the AMT_PAYMENT spread across different "
    "PriorApplication_CLIENT_TYPEs for the Client."
)
    
        In [47]:
                Copied!
                
                
            # Add description
client_installments_amt_payments_by_installment_status_6cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "INSTALLMENT_STATUS for the Client over a 6 calendar months period. It "
    "provides a detailed breakdown in the form of a dictionary, where each "
    "key represents a unique INSTALLMENT_STATUS. The corresponding value "
    "for each key is the cumulative sum of AMT_PAYMENTs within that "
    "INSTALLMENT_STATUS. This distribution offers insights into the "
    "AMT_PAYMENT spread across different INSTALLMENT_STATUSs for the "
    "Client."
)
# Add description
client_installments_amt_payments_by_installment_status_6cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "INSTALLMENT_STATUS for the Client over a 6 calendar months period. It "
    "provides a detailed breakdown in the form of a dictionary, where each "
    "key represents a unique INSTALLMENT_STATUS. The corresponding value "
    "for each key is the cumulative sum of AMT_PAYMENTs within that "
    "INSTALLMENT_STATUS. This distribution offers insights into the "
    "AMT_PAYMENT spread across different INSTALLMENT_STATUSs for the "
    "Client."
)
    
        In [48]:
                Copied!
                
                
            # Add description
client_installments_amt_payments_by_installment_status_12cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "INSTALLMENT_STATUS for the Client over a 12 calendar months period. It"
    " provides a detailed breakdown in the form of a dictionary, where each"
    " key represents a unique INSTALLMENT_STATUS. The corresponding value "
    "for each key is the cumulative sum of AMT_PAYMENTs within that "
    "INSTALLMENT_STATUS. This distribution offers insights into the "
    "AMT_PAYMENT spread across different INSTALLMENT_STATUSs for the "
    "Client."
)
# Add description
client_installments_amt_payments_by_installment_status_12cmo.update_description(
    "Distribution of the total AMT_PAYMENTs of Installments, segmented by "
    "INSTALLMENT_STATUS for the Client over a 12 calendar months period. It"
    " provides a detailed breakdown in the form of a dictionary, where each"
    " key represents a unique INSTALLMENT_STATUS. The corresponding value "
    "for each key is the cumulative sum of AMT_PAYMENTs within that "
    "INSTALLMENT_STATUS. This distribution offers insights into the "
    "AMT_PAYMENT spread across different INSTALLMENT_STATUSs for the "
    "Client."
)
    
        In [49]:
                Copied!
                
                
            # Add description
client_entropy_of_count_of_installments_by_installment_status_24cmo.update_description(
    "The feature evaluates the distribution of a Client's count of "
    "Installments across various INSTALLMENT_STATUSs over a 24 calendar "
    "months period using entropy. Higher entropy signifies a more uniform "
    "distribution of count of Installments across INSTALLMENT_STATUSs, "
    "while lower entropy suggests a concentration within specific "
    "INSTALLMENT_STATUSs."
)
# Add description
client_entropy_of_count_of_installments_by_installment_status_24cmo.update_description(
    "The feature evaluates the distribution of a Client's count of "
    "Installments across various INSTALLMENT_STATUSs over a 24 calendar "
    "months period using entropy. Higher entropy signifies a more uniform "
    "distribution of count of Installments across INSTALLMENT_STATUSs, "
    "while lower entropy suggests a concentration within specific "
    "INSTALLMENT_STATUSs."
)