Accessing metadata of registered objects
Accessing Metadata Of Registered Objects¶
For each of the Registered Objects, we can access a set of metadata for the objects. We illustrate the same in this notebook under following sections:
- DataTable
- DataElement
- Feature
- Model
- ModelTransform
- Policy
- GlobalFunction
- Report
- User
DataTable¶
# Import DataTable from Corridor
from corridor import DataTable
List the set of DataTables available on the Platform
# Get a list of DataTable NAMES that's available through Corridor Platforms
DataTable.tables[:5]
['application_prospecting', 'loan_prospecting', 'app_to_loan_prospect', 'loan_performance_prospect', 'application']
Create DataTable Object for a specific DataTable
# use the DataTable NAME to access the registered DataTable
DataTable_example = DataTable(name='application')
Access the metadata for the DataTable Created Below is a list of metadata available for DataTable
- name
- alias
- location
- columns
- created_by
- created_date
- description
- is_primary
- type
print(f'name: {DataTable_example.name}')
print(f'alias: {DataTable_example.alias}')
print(f'location: {DataTable_example.location}')
print(f'columns: {DataTable_example.columns[:3]}')
print(f'created_by: {DataTable_example.created_by}')
print(f'created_date: {DataTable_example.created_date}')
print(f'description: {DataTable_example.description}')
print(f'is_primary: {DataTable_example.is_primary}')
print(f'type: {DataTable_example.type}')
name: application alias: application location: s3a://corridor.dev/lake/data_sandbox/v3/Application_Table.parquet columns: [<DataColumn table="application", alias="corridor_application_id">, <DataColumn table="application", alias="acc_now_delinq">, <DataColumn table="application", alias="open_acc_6m">] created_by: master created_date: 2020-09-28 07:39:26 description: s3a://corridor.dev/lake/data_sandbox/v3/Application_Table.parquet contains application data is_primary: True type: Cleansed
DataElement¶
# Import DataElement from Corridor
from corridor import DataElement
Access the set of DataElements available through the imported DataElement
# Get a list of DataElement alias that's available through Corridor Platforms
DataElement.elements
['annual_income', 'fico', 'loan_amount', 'loan_default_in_18m']
# Create DataElement using alias
# If only using alias, this will pull the MOST RECENT APPROVED version for the DataElement
DE_example = DataElement('annual_income')
# Create DataElement using alias and version number to get the specific version
DE_example_w_version = DataElement('annual_income', version=1)
Access the metadata for the DataElement Created Below is a list of attributes available for DataElement
- version
- platform_entity
- permissible_purpose
- group
- type
- current_status
- Approval Statuses
- object
- status
- status_date
- comment
- responsibility
- reviewer
- is_old
- created_date
- created_by
- name
- alias
- is_aggregate
- inputs
- description
- definition
- note
print(f'platform_entity: {DE_example.platform_entity}')
print(f'permissible_purpose: {DE_example.permissible_purpose}')
print(f'group: {DE_example.group}')
print(f'type: {DE_example.type}')
print(f'current_status: {DE_example.current_status}')
print('All Approval Statuses:')
for approval_status in DE_example.approval_statuses:
print(f'\n\tobject:\t\t{approval_status.object}')
print(f'\tstatus:\t\t{approval_status.status}')
print(f'\tstatus_date:\t{approval_status.status_date}')
print(f'\tcomment:\t{approval_status.comment}')
print(f'\tresponsibility:\t{approval_status.responsibility}')
print(f'\treviewer:\t{approval_status.reviewer}')
print(f'\tis_old:\t\t{approval_status.is_old}\n')
print(f'created_date: {DE_example.created_date}')
print(f'created_by: {DE_example.created_by}')
print(f'name: {DE_example.name}')
print(f'alias: {DE_example.alias}')
print(f'is_aggregate: {DE_example.is_aggregate}')
print(f'inputs: {DE_example.inputs}')
print(f'description: {DE_example.description}')
print(f'definition: {DE_example.definition}')
print(f'note: {DE_example.note}')
platform_entity: <Entity name="Application"> permissible_purpose: ['Marketing and Sales'] group: Default type: Numerical current_status: Approved All Approval Statuses: object: <DataElement alias="annual_income", version=1> status: Accepted status_date: 2023-04-10 12:44:06.727130 comment: Accepting comment. responsibility: <Responsibility name="Compliance"> reviewer: master is_old: False object: <DataElement alias="annual_income", version=1> status: Accepted status_date: 2023-04-10 12:43:15.912751 comment: Accepting comment. responsibility: <Responsibility name="Functional Head"> reviewer: master is_old: False created_date: 2022-10-03 11:36:32 created_by: master name: Annual Income alias: annual_income is_aggregate: False inputs: [<DataColumn table="application", alias="annual_inc">] description: Annual Income of the applicant definition: None note: Annual Income of the applicant.
Features¶
# Import DataElement from Corridor
from corridor import Feature
Access the set of Features available through the imported Features
# Get a list of Feature aliases that's available through Corridor Platforms
Feature.elements
['monthly_income', 'monthly_repayment', 'dti', 'weight']
Feature_example = Feature('monthly_income')
Access the metadata for the Feature Created Below is a list of metadata available for Feature
- version
- platform_entity
- permissible_purpose
- group
- type
- current_status
- Approval Statuses
- object
- status
- status_date
- comment
- responsibility
- reviewer
- is_old
- created_date
- created_by
- name
- alias
- is_aggregate
- inputs
- description
- definition
- note
print(f'version: {Feature_example.version}')
print(f'platform_entity: {Feature_example.platform_entity}')
print(f'permissible_purpose: {Feature_example.permissible_purpose}')
print(f'group: {Feature_example.group}')
print(f'type: {Feature_example.type}')
print(f'current_status: {Feature_example.current_status}')
print('All Approval Statuses:')
for approval_status in Feature_example.approval_statuses:
print(f'\n\tobject:\t\t{approval_status.object}')
print(f'\tstatus:\t\t{approval_status.status}')
print(f'\tstatus_date:\t{approval_status.status_date}')
print(f'\tcomment:\t{approval_status.comment}')
print(f'\tresponsibility:\t{approval_status.responsibility}')
print(f'\treviewer:\t{approval_status.reviewer}')
print(f'\tis_old:\t\t{approval_status.is_old}\n')
print(f'created_date: {Feature_example.created_date}')
print(f'created_by: {Feature_example.created_by}')
print(f'name: {Feature_example.name}')
print(f'alias: {Feature_example.alias}')
print(f'is_aggregate: {Feature_example.is_aggregate}')
print(f'inputs: {Feature_example.inputs}')
print(f'description: {Feature_example.description}')
print(f'definition: {Feature_example.definition}')
print(f'note: {Feature_example.note}')
version: 1 platform_entity: <Entity name="Application"> permissible_purpose: ['Marketing and Sales'] group: Default type: Numerical current_status: Approved All Approval Statuses: object: <Feature alias="monthly_income", version=1> status: Accepted status_date: 2023-04-10 12:48:51.036235 comment: Accepted. responsibility: <Responsibility name="Compliance"> reviewer: master is_old: False object: <Feature alias="monthly_income", version=1> status: Accepted status_date: 2023-04-10 12:49:02.199199 comment: Accepted. responsibility: <Responsibility name="Functional Head"> reviewer: master is_old: False created_date: 2022-10-03 11:44:08 created_by: master name: Monthly Income alias: monthly_income is_aggregate: False inputs: [<DataElement alias="annual_income", version=1>, <GlobalFunction alias="annual_to_monthly", version=1>] description: Monthly Income of the applicant definition: return annual_to_monthly(annual_income) note: None
# Get the different versions of the specific Feature
Feature_example.get_versions()
Feature: Debt Capacity, version: 1
def get_debt_capacity(...):
return (requested_loan_amount/max(0.1,annual_income))
Model¶
# Import Model from Corridor
from corridor import Model
# Get a list of Model names that's available through the Platform - users can call using specific array index
Model.models[31:40]
['R linear Regression 2', 'PD Model Strict', 'SAS logit class 2 pmml', 'SAS DT class 2 pmml', 'SAS nn class 2 pmml', 'SAS linear Regression 2', 'SAS DT Regression 2', 'SAS NN Regression 2', 'PD Model Lenient ']
Create Model Object for a specific Model
# use the MODEL NAME instead of MODEL OUTPUT_ALIAS to access the model
Model_example = Model('PD Model Strict')
Access the metadata for the Model Created Below is a list of metadata available for Model
- version
- platform_entity
- permissible_purpose
- group
- type
- current_status
- Approval Statuses
- object
- status
- status_date
- comment
- responsibility
- reviewer
- is_old
- created_date
- created_by
- name
- inputs: model inputs include all the DataElements, Features and Transforms
- description
- output_alias
- input_type
- note
print(f'version: {Model_example.version}')
print(f'platform_entity: {Model_example.platform_entity}')
print(f'permissible_purpose: {Model_example.permissible_purpose}')
print(f'group: {Model_example.group}')
print(f'type: {Model_example.type}')
print(f'current_status: {Model_example.current_status}')
print('All Approval Statuses:')
for approval_status in Model_example.approval_statuses:
print(f'\n\tobject:\t\t{approval_status.object}')
print(f'\tstatus:\t\t{approval_status.status}')
print(f'\tstatus_date:\t{approval_status.status_date}')
print(f'\tcomment:\t{approval_status.comment}')
print(f'\tresponsibility:\t{approval_status.responsibility}')
print(f'\treviewer:\t{approval_status.reviewer}')
print(f'\tis_old:\t\t{approval_status.is_old}\n')
print(f'created_date: {Model_example.created_date}')
print(f'created_by: {Model_example.created_by}')
print(f'name: {Model_example.name}')
print(f'inputs: {Model_example.inputs}')
print(f'description: {Model_example.description}')
print(f'output_alias: {Model_example.output_alias}')
print(f'input_type: {Model_example.input_type}')
print(f'note: {Model_example.note}')
version: 1 platform_entity: Application permissible_purpose: ['Underwriting'] group: Probability of Default type: Binary Classification current_status: Approved All Approval Statuses: object: <Model alias="pd_model_ver1", version=1> status: Accepted status_date: 2021-01-11 12:44:06.727130 comment: Accepting comment. responsibility: <Responsibility name="Non Veto Reviewer"> reviewer: master is_old: False object: <Model alias="pd_model_ver1", version=1> status: Accepted status_date: 2021-01-11 12:41:15.912751 comment: Accepting comment. responsibility: <Responsibility name="Functional Head"> reviewer: master is_old: False created_date: 2020-09-29 09:25:04 created_by: master name: PD Model Strict inputs: [<Feature alias="debt_capacity", version=1>, <DataElement alias="fico_range_high", version=1>, <Feature alias="age_of_credit_file", version=1>] description: Ver1 of the PD Model based on FICO, Age of Credit Profile and Debt Capacity output_alias: pd_model_ver1 input_type: python function note: None
ModelTransform¶
# Import ModelTransform from Corridor
from corridor import ModelTransform
Create ModelTranform Object for a specific Model Transform
# use the MODEL NAME & TRANSFORM ALIAS to access the model transform
FICO_transform = ModelTransform(model='PD Model with Transform',alias = 'fico_normalized')
Access the metadata for the Model Created Below is a list of metadata available for Model
- permissible_purpose
- group
- type
- created_date
- created_by
- name
- inputs
- definition
- description
- model
print(f'permissible_purpose: {FICO_transform.permissible_purpose}')
print(f'group: {FICO_transform.group}')
print(f'type: {FICO_transform.type}')
print(f'created_date: {FICO_transform.created_date}')
print(f'created_by: {FICO_transform.created_by}')
print(f'name: {FICO_transform.name}')
print(f'inputs: {FICO_transform.inputs}')
print(f'definition: {FICO_transform.definition}')
print(f'description: {FICO_transform.description}')
print(f'model: {FICO_transform.model}')
permissible_purpose: ['Customer Management'] group: Credit Bureau type: Numerical created_date: 2022-04-21 12:04:29.783472 created_by: master name: Fico Normalized inputs: [<DataElement alias="fico", version=1>] definition: return fico/1000 description: Transformed Fico model: <Model name="PD Model with Transform", version=1>
Policy¶
# Import Policy from Corridor
from corridor import Policy
Access the set of Policies available on the Platform
policies = Policy.policies
# Get a list of different types of Policies
print(f"UnderWriting Policies: {policies['UnderWriting'][:5]}")
# print(f"Prospecting Policies: {policies['Prospecting'][:2]}") # run if there is prospecting policy
# print(f"CustomerManagement Policies: {policies['CustomerManagement']}") # run if there is customer management policy
UnderWriting Policies: ['policy_5oct_test1_strat', 'New Policy_copy1', 'UW Policy with PD Model and Framework', ' Policy_offer_create_custom_setaction_30sept', ' Policy_offer_create_custom_input_30sept']
Create Policy Object for a specific Policy
# use the Policy NAME to access the policy
Policy_example = Policy('UW Policy with PD Model and Framework')
Access the metadata for the Policy Created Below is a list of metadata available for Policy
- version
- platform_entity
- permissible_purpose
- type
- current_status
- Approval Statuses
- object
- status
- status_date
- comment
- responsibility
- reviewer
- is_old
- created_date
- created_by
- name
- description
- note
print(f'version: {Policy_example.version}')
print(f'platform_entity: {Policy_example.platform_entity}')
print(f'permissible_purpose: {Policy_example.permissible_purpose}')
print(f'type: {Policy_example.type}')
print(f'current_status: {Policy_example.current_status}')
print('All Approval Statuses:')
for approval_status in Policy_example.approval_statuses:
print(f'\n\tobject:\t\t{approval_status.object}')
print(f'\tstatus:\t\t{approval_status.status}')
print(f'\tstatus_date:\t{approval_status.status_date}')
print(f'\tcomment:\t{approval_status.comment}')
print(f'\tresponsibility:\t{approval_status.responsibility}')
print(f'\treviewer:\t{approval_status.reviewer}')
print(f'\tis_old:\t\t{approval_status.is_old}\n')
print(f'created_date: {Policy_example.created_date}')
print(f'created_by: {Policy_example.created_by}')
print(f'name: {Policy_example.name}')
print(f'description: {Policy_example.description}')
print(f'note: {Policy_example.note}')
version: 1 platform_entity: Application permissible_purpose: ['Underwriting'] type: UnderWriting current_status: Draft All Approval Statuses: created_date: 2020-09-29 13:24:22 created_by: master name: UW Policy with PD Model and Framework description: Simple UW policy with Data Elements, Features, PD Model & Valuation Framework note: None
# Policy strategy structure
for strategy in Policy_example.strategies:
print(f'strategy: {strategy.name}')
if strategy.segments:
for seg in strategy.segments:
print(f' segment: {seg.name}')
for rule in seg.rules:
print(f' rule: {rule.name}')
else:
for rule in strategy.rules:
print(f' rule: {rule.name}')
strategy: Min. Eligibility Requirement rule: Min FICO & Max Debt Capacity strategy: Loan Approval Strategy segment: 680 < FICO < 780 rule: Loan Amount rule: PD Threshold rule: Loan Pricing segment: FICO >= 780 rule: Loan Amount rule: Loan Pricing rule: PD Threshold strategy: Set Customer Value rule: Customer Value
GlobalFunction¶
Access the list of GlobalFunctions available through the imported GlobaFunction module
# Import GlobalFunction from Corridor
from corridor import GlobalFunction
List the set of GlobalFunctions registered on the Platform
GlobalFunction.global_functions
['annual_to_monthly', 'rounding_function', 'exponential_function_with_rounding']
Instantiate a GlobalFunction and access it's metadata
GF_example = GlobalFunction("exponential_function_with_rounding")
Access the metadata for the GlobalFunction Created
Below is a list of metadata available for GlobalFunction
- type
- version
- current_status
- Approval Statuses
- object
- status
- status_date
- comment
- responsibility
- reviewer
- is_old
- created_date
- created_by
- name
- alias
- colname
- description
- arguments
- id
- definition
- note
print(f'type: {GF_example.type}')
print(f'version: {GF_example.version}')
print(f'current_status: {GF_example.current_status}')
print('All Approval Statuses:')
for approval_status in GF_example.approval_statuses:
print(f'\n\tobject:\t\t{approval_status.object}')
print(f'\tstatus:\t\t{approval_status.status}')
print(f'\tstatus_date:\t{approval_status.status_date}')
print(f'\tcomment:\t{approval_status.comment}')
print(f'\tresponsibility:\t{approval_status.responsibility}')
print(f'\treviewer:\t{approval_status.reviewer}')
print(f'\tis_old:\t\t{approval_status.is_old}\n')
print(f'created_date: {GF_example.created_date}')
print(f'created_by: {GF_example.created_by}')
print(f'name: {GF_example.name}')
print(f'alias: {GF_example.alias}')
print(f'colname: {GF_example.colname}')
print(f'description: {GF_example.description}')
print(f'arguments: {GF_example.arguments}')
print(f'id: {GF_example.id}')
print(f'note: {GF_example.note}')
print(f'definition: {GF_example.definition}')
type : Numerical
version: 1
current_status: Draft
All Approval Statuses:
created_date: 2022-10-20 15:32:14
created_by: master
name: Exponential Function With Rounding
alias: exponential_function_with_rounding
colname: exponential_function_with_rounding__v1__id370
description: function to calculate x^n
arguments: [InputArgument(alias='base', type=None, default_value=None), InputArgument(alias='power', type=None, default_value=None)]
id: 370
note: None
definition: if base != 0 and power != 0:
return round(base ** power, 0)
elif power != 0:
return 1
else:
return None
Report¶
Access the list of Reports available through the imported Report module
# Import Report from Corridor
from corridor import Report
List the set of Reports registered on the Platform
Report.all()
[<Report name="Basic Feature Reports", version=1>, <Report name="Basic Model Reports", version=1>, <Report name="Model Input Reports", version=1>]
Instantiate a Report and access it's metadata
report_example = Report("Basic Feature Reports")
Access the metadata for the Reports Created
Below is a list of metadata available for Reports
- object_type
- object_subtype
- job_types
- source_data
- inputs
- parameters
- outputs
- name
- description
- id
- created_date
- created_by
- note
print(f'object_type: {report_example.object_type}')
print(f'object_subtype: {report_example.object_subtype}')
print(f'job_types: {report_example.job_types}')
print(f'source_data: {report_example.source_data}')
print(f'inputs: {report_example.inputs}')
print('parameters:')
for param in report_example.parameters:
print('\t',param)
print(f'outputs:')
for output in report_example.outputs:
print('\t',output)
print(f'name: {report_example.name}')
print(f'description: {report_example.description}')
print(f'id: {report_example.id}')
print(f'created_date: {report_example.created_date}')
print(f'created_by: {report_example.created_by}')
print(f'note: {report_example.note}')
object_type: Feature object_subtype: ['Numerical', 'String', 'DateTime', 'Boolean', 'ArrayNumerical', 'ArrayString', 'ArrayDateTime', 'ArrayBoolean'] job_types: ['Comparison', 'Simulation', 'Validation', 'Verification'] source_data: FinalData inputs: [] parameters: <ReportParameter report="Basic Feature Reports" name="Weight"> <ReportParameter report="Basic Feature Reports" name="Offset"> <ReportParameter report="Basic Feature Reports" name="Date"> outputs: <ReportOutput report="Basic Feature Reports" name="DE Histogram with Offset"> <ReportOutput report="Basic Feature Reports" name="Univariate Distribution"> <ReportOutput report="Basic Feature Reports" name="Variance Metric"> name: Basic Feature Reports description: Basic Feature Reports id: 461 created_date: 2022-10-20 14:03:45 created_by: master note: None
User¶
Access the list of users available through the imported User module
# Import User from Corridor
from corridor import User
List the set of Reports registered on the Platform
User.all()[:5]
[<User username="admin">, <User username="analyst">, <User username="hom">, <User username="cro">, <User username="viewer">]
Instantiate a User and access it's metadata
user_example = User("admin")
Access the metadata for the User Created
Below is a list of metadata available for User
- username
- first_name
- last_name
- department
- is_active
- user_roles
- created_by
- created_date
- last_modified_by
- last_modified_date
- last_login_date
print(f'Username: {user_example.username}')
print(f'First Name: {user_example.first_name}')
print(f'Last Name: {user_example.last_name}')
print(f'Department: {user_example.department}')
print(f'Email: {user_example.email}')
print(f'Is active: {user_example.is_active}')
print(f'User Roles: {user_example.user_roles}')
print(f'Created By: {user_example.created_by}')
print(f'Created Date: {user_example.created_date}')
print(f'Last Modified By: {user_example.last_modified_by}')
print(f'Last Modified Date: {user_example.last_modified_date}')
print(f'Last login Date: {user_example.last_login_date}')
Username: admin First Name: None Last Name: None Department: None Email: [email protected] Is active: True User Roles: [{'name': 'Admin', 'workspace': 'workspace2'}, {'name': 'Admin', 'workspace': 'workspace3'}, {'name': 'Admin', 'workspace': 'User Manual'}, {'name': 'Admin', 'workspace': 'corridor'}, {'name': 'Admin', 'workspace': 'Fair Lending Model Retrain'}, {'name': 'Admin', 'workspace': 'Monitoring Dashboard'}] Created By: None Created Date: 2020-10-20 07:34:44.132441 Last Modified By: System Last Modified Date: 2023-03-31 16:13:12.441784 Last login Date: 2023-03-31 16:13:12.460721