ThematicRiskModel

class ThematicRiskModel(id_, name, coverage, term, universe_identifier, vendor, version, universe_size=None, entitlements=None, description=None, expected_update_time=None)[source]

Thematic Risk Model used for calculating exposure to thematic flagship baskets

Methods

__init__(id_, name, coverage, term, universe_identifier, vendor, version, universe_size=None, entitlements=None, description=None, expected_update_time=None)[source]

Create new Thematic risk model object

Parameters:
  • id – risk model id (cannot be changed)

  • name (str) – risk model name

  • coverage (RiskModelCoverage) – coverage of risk model asset universe

  • term (RiskModelTerm) – horizon term

  • universe_identifier (RiskModelUniverseIdentifier) – identifier used in asset universe upload (cannot be changed)

  • vendor (str) – risk model vendor

  • version (float) – version of model

  • universe_size (Optional[int]) – total rough expected universe size (rounding up to nearest 1k)

  • entitlements (Union[Dict, Entitlements, None]) – entitlements associated with risk model

  • description (Optional[str]) – risk model description

  • expected_update_time (Optional[time]) – time when risk model daily data is expected to be uploaded

Returns:

Thematic Risk Model object

delete()

Delete existing risk model object from Marquee

delete_factor_metadata(factor_id)

Delete a factor’s metadata from a risk model

Parameters:

factor_id (str) – factor id associated with risk model’s factor

classmethod from_many_targets(models)
classmethod from_target(model)[source]
classmethod get(model_id)

Get a risk model from Marquee :type model_id: str :param model_id: risk model id corresponding to Marquee Risk Model

Returns:

Risk Model object

get_asset_universe(start_date, end_date=None, assets=<gs_quant.target.risk_models.RiskModelDataAssetsRequest object>, format=ReturnFormat.DATA_FRAME)

Get asset universe data for existing risk model

Parameters:
  • start_date (date) – Start date for data request. Must be equal to end_date if universe array in DataAssetsRequest is empty.

  • end_date (Optional[date]) – End date for data request. Must be equal to start_date if universe array in DataAssetsRequest is empty.

  • assets (RiskModelDataAssetsRequest) – DataAssetsRequest object with identifier and list of assets to retrieve for request

  • format (ReturnFormat) – Which format to return the results in

Return type:

Union[List[Dict], DataFrame]

Returns:

Risk model universe data in a pandas dataframe or dict

Usage

Get the assets covered by the model between start date and end date.

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel, DataAssetsRequest,         ...                      RiskModelUniverseIdentifierRequest as UniverseIdentifier, ReturnFormat
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> universe = ['GS UN']
>>> model = FactorRiskModel.get("MODEL_ID")
>>> asset_universe = model.get_asset_universe(start_date, end_date,
...                                           DataAssetsRequest(UniverseIdentifier.bbid, universe))

See also

get_specific_risk() get_universe_factor_exposure() get_total_risk()

get_calendar(start_date=None, end_date=None)

Get risk model calendar for existing risk model between start and end date

Parameters:
  • start_date (Optional[date]) – List returned including and after start_date

  • end_date (Optional[date]) – List returned up to and including end_date

Return type:

RiskModelCalendar

Returns:

RiskModelCalendar for model

Usage

Get the risk model calendar.

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> model = FactorRiskModel.get("MODEL_ID")
>>> model_calendar = model.get_calendar(start_date, end_date)

See also

get_most_recent_date_from_calendar() get_dates() get_missing_dates()

get_data(measures, start_date, end_date=None, assets=<gs_quant.target.risk_models.RiskModelDataAssetsRequest object>, limit_factors=True)

Get data for multiple measures for existing risk model

Parameters:
  • measures (List[RiskModelDataMeasure]) – list of measures for general risk model data request

  • start_date (date) – start date for data request

  • end_date (Optional[date]) – end date for data request

  • assets (RiskModelDataAssetsRequest) – DataAssetsRequest object with identifier and list of assets to retrieve for request

  • limit_factors (bool) – limit factors included in factorData and covariance matrix to only include factors which the input universe has non-zero exposure to

Return type:

Dict

Returns:

risk model data or MqRequestError if query is too large for the service

get_dates(start_date=None, end_date=None, event_type=None)

Get dates between start_date and end_date for which risk model data is present

Parameters:
  • start_date (Optional[date]) – List returned including and after start_date

  • end_date (Optional[date]) – List returned up to and including end_date

  • event_type (Optional[RiskModelEventType]) – Which event type to retrieve dates for

Return type:

List[date]

Returns:

A list of dates where risk model data is present

Usage

Get all the dates for which risk model data is present over start_date and end_date (inclusive).

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel, RiskModelEventType
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> model = FactorRiskModel.get("MODEL_ID")
>>> dates = model.get_dates(start_date, end_date)

See also

get_missing_dates() get_calendar() get_most_recent_date_from_calendar()

get_factor(name, start_date=None, end_date=None)

Get risk model factor from its name

Parameters:
  • name (str) – Factor name associated with risk model

  • start_date (Optional[date]) – Start date of when to search for factor (optional, default to last month)

  • end_date (Optional[date]) – End date of when to search for factor (optional, default to today)

Return type:

Factor

Returns:

Factor object

get_factor_data(start_date=None, end_date=None, identifiers=None, include_performance_curve=False, category_filter=None, factor_type=None, format=ReturnFormat.DATA_FRAME)

Get factor data for existing risk model

Parameters:
  • start_date (Optional[date]) – Start date for data request

  • end_date (Optional[date]) – End date for data request

  • identifiers (Optional[List[str]]) – List of factor ids associated with risk model

  • include_performance_curve (bool) – Include the performance curve of the factors

  • category_filter (Optional[List[str]]) – Filter the results to those having one of the specified categories. Default is to return all results

  • factor_type (Optional[FactorType]) – The type of factor.

  • format (ReturnFormat) – which format to return the results in

Return type:

Union[List[Dict], DataFrame]

Returns:

Risk model factor data

Usage

Get factor data for factors whose ids are specified in identifiers.

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel
>>> import datetime as dt
>>>
>>> model = FactorRiskModel.get("MODEL_ID")
>>> factor_data = model.get_factor_data()

See also

get_many_factors :func:`get_factor_returns_by_name()

get_factor_returns_by_id(start_date, end_date=None, assets=None, factors=[], format=ReturnFormat.DATA_FRAME)

Get factor return data for existing risk model keyed by factor id

Parameters:
  • start_date (date) – Start date for data request

  • end_date (Optional[date]) – End date for data request

  • assets (Optional[RiskModelDataAssetsRequest]) – DataAssetsRequest object with identifier and list of assets to limit the factors by

  • factors (List[str]) – The factors to get factor return data for. If empty, the data for all factors is returned

  • format (ReturnFormat) – Which format to return the results in

Return type:

Union[Dict, DataFrame]

Returns:

Factor returns by factor id

Usage

Get factor returns between start date and end date.

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> model = FactorRiskModel.get("MODEL_ID")
>>> factor_returns = model.get_factor_returns_by_id(start_date, end_date)

See also

get_factor_returns_by_name() get_factor_data()

get_factor_returns_by_name(start_date, end_date=None, assets=None, factors=[], format=ReturnFormat.DATA_FRAME)

Get factor return data for existing risk model keyed by name

Parameters:
  • start_date (date) – Start date for data request

  • end_date (Optional[date]) – End date for data request

  • assets (Optional[RiskModelDataAssetsRequest]) – DataAssetsRequest object with identifier and list of assets to limit the factors by

  • factors (List[str]) – The factors to get factor return data for. If empty, the data for all factors is returned

  • format (ReturnFormat) – Which format to return the results in

Return type:

Union[Dict, DataFrame]

Returns:

Factor returns by name

Usage

Get factor returns between start date and end date.

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> model = FactorRiskModel.get("MODEL_ID")
>>> factor_returns = model.get_factor_returns_by_name(start_date, end_date)

See also

get_factor_returns_by_id() get_factor_data()

classmethod get_many(ids=None, terms=None, vendors=None, names=None, coverages=None, limit=None)[source]

Get a Thematic risk model from Marquee

Parameters:
  • ids (Optional[List[str]]) – list of model identifiers in Marquee

  • terms (Optional[List[str]]) – list of model terms

  • vendors (Optional[List[str]]) – list of model vendors

  • names (Optional[List[str]]) – list of model names

  • coverages (Optional[List[str]]) – list of model coverages

  • limit (Optional[int]) – limit of number of models in response

Returns:

Macro Risk Model object

get_many_factors(start_date=None, end_date=None, factor_names=None, factor_ids=None, factor_type=None)

Get risk model factors :type start_date: Optional[date] :param start_date: Start date of when to search for factors (optional, default to last month) :type end_date: Optional[date] :param end_date: End date of when to search for factors :type factor_names: Optional[List[str]] :param factor_names: The list of names of factors to get. All names must be valid factor names. If both

factor_names and factor_ids are empty, all the factors will be returned.

Parameters:
  • factor_ids (Optional[List[str]]) – The list of ids of factors to get. All ids must be valid factor ids. If both factor_names and factor_ids are empty, all the factors will be returned

  • factor_type (Optional[FactorType]) – Whether to return factors or factor categories. If unspecified, all the factors of all types will be returned

Return type:

List[Factor]

Returns:

A list of Factor objects

Usage

Given a list of factor names and/or ids, return the factor objects that represent the factor requested. If no factor names or ids are provided, all the factors will be returned.

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel, FactorType
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> model = FactorRiskModel.get("MODEL_ID")
>>> many_factors = model.get_many_factors(start_date, end_date, factor_names=["factor1", "factor2"],
...                                       factor_type=FactorType.Factor)
>>>

See also

get_factor() get_factor_data()

get_missing_dates(start_date=None, end_date=None)

Get any dates where data is not published according to expected days returned from the risk model calendar

Parameters:
  • start_date (Optional[date]) – Date to truncate missing dates at

  • end_date (Optional[date]) –

    Date to truncate missing dates at

    If no end_date is provided, end_date defaults to T-1 date according

    to the risk model calendar

Return type:

List[date]

Usage

Get dates with missing data between start date and end date.

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> model = FactorRiskModel.get("MODEL_ID")
>>> dates = model.get_missing_dates(start_date, end_date)

See also

get_dates() get_calendar()

get_most_recent_date_from_calendar()

Get T-1 date according to risk model calendar

Return type:

date

get_residual_variance(start_date, end_date=None, assets=<gs_quant.target.risk_models.RiskModelDataAssetsRequest object>, format=ReturnFormat.DATA_FRAME)

Get residual variance data for existing risk model

Parameters:
  • start_date (date) – Start date for data request

  • end_date (Optional[date]) – End date for data request

  • assets (RiskModelDataAssetsRequest) – DataAssetsRequest object with identifier and list of assets to retrieve for request

  • format (ReturnFormat) – Which format to return the results in

Return type:

Union[List[Dict], DataFrame]

Returns:

Residual variance for assets requested

Usage

Get residual variance data for assets specified in assets between start_date and end_date

Examples

>>> from gs_quant.models.risk_model import MacroRiskModel, DataAssetsRequest,         ...                      RiskModelUniverseIdentifierRequest as UniverseIdentifier
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> model = FactorRiskModel.get("MODEL_ID")
>>> residual_variance = model.get_residual_variance(start_date, end_date,
...                                                 DataAssetsRequest(UniverseIdentifier.bbid, ['GS UN']))

See also

get_total_risk() get_historical_beta() get_specific_return()

get_specific_risk(start_date, end_date=None, assets=<gs_quant.target.risk_models.RiskModelDataAssetsRequest object>, format=ReturnFormat.DATA_FRAME)

Get specific risk data for existing risk model

Parameters:
  • start_date (date) – Start date for data request

  • end_date (Optional[date]) – End date for data request

  • assets (RiskModelDataAssetsRequest) – DataAssetsRequest object with identifier and list of assets to retrieve for request

  • format (ReturnFormat) – Which format to return the results in

Return type:

Union[List[Dict], DataFrame]

Returns:

Specific risk for assets requested

Usage

Get specific risk data for assets specified in assets between start_date and end_date

Examples

>>> from gs_quant.models.risk_model import MacroRiskModel, DataAssetsRequest,         ...                      RiskModelUniverseIdentifierRequest as UniverseIdentifier
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> model = FactorRiskModel.get("MODEL_ID")
>>> specific_risk = model.get_specific_risk(start_date, end_date,
...                                         DataAssetsRequest(UniverseIdentifier.bbid, ['GS UN']))

See also

get_residual_variance() get_specific_return() get_total_risk()

get_universe_exposure(start_date, end_date=None, assets=<gs_quant.target.risk_models.RiskModelDataAssetsRequest object>, get_factors_by_name=False, format=ReturnFormat.DATA_FRAME)

Get universe factor exposure data for existing risk model

Parameters:
  • start_date (date) – Start date for data request

  • end_date (Optional[date]) – End date for data request

  • assets (RiskModelDataAssetsRequest) – DataAssetsRequest object with identifier and list of assets to retrieve for request

  • get_factors_by_name (bool) – Return results keyed by factor name instead of ID

  • format (ReturnFormat) – Which format to return the results in

Return type:

Union[List[Dict], DataFrame]

Returns:

Factor exposure for assets requested

Usage

Given a list of assets, return their exposure to factor between start date and end date.

Examples

>>> from gs_quant.models.risk_model import FactorRiskModel, DataAssetsRequest,         ...                      RiskModelUniverseIdentifierRequest as UniverseIdentifier
>>> import datetime as dt
>>>
>>> start_date = dt.date(2022, 1, 1)
>>> end_date = dt.date(2022, 5, 2)
>>> universe = ['GS UN']
>>> model = FactorRiskModel.get("MODEL_ID")
>>> universe_exposure = model.get_universe_exposure(start_date, end_date,
...                                                 DataAssetsRequest(UniverseIdentifier.bbid, universe))

See also

get_asset_universe() get_factor_returns_by_name() get_covariance_matrix()

get_universe_sensitivity(start_date, end_date=None, assets=<gs_quant.target.risk_models.RiskModelDataAssetsRequest object>, get_factors_by_name=False, format=ReturnFormat.DATA_FRAME)[source]

Get universe sensitivity data for existing thematic risk model

Parameters:
  • start_date (date) – start date for data request

  • end_date (Optional[date]) – end date for data request

  • assets (RiskModelDataAssetsRequest) – DataAssetsRequest object with identifier and list of assets to retrieve for request

  • get_factors_by_name (bool) – return results keyed by factor name instead of ID

  • format (ReturnFormat) – which format to return the results in

Return type:

Union[List[Dict], DataFrame]

Returns:

basket sensitivity for assets requested

save()

Upload current Risk Model object to Marquee

save_factor_metadata(factor_metadata)

Add metadata to a factor in a risk model

Parameters:

factor_metadata (Factor) – factor metadata object

upload_asset_coverage_data(date=None, batch_size=100)

Upload to the coverage dataset for given risk model and date

Parameters:
  • date (Optional[date]) – Date to upload coverage data for, default date is last date from risk model calendar

  • batch_size (int) – Number of assets to upload in one request

Posting to the coverage dataset within the last 5 days will enable the risk model to be seen in the Marquee UI dropdown for users with “execute” capabilities

upload_calendar(calendar)

Upload risk model calendar to existing risk model

Parameters:

calendar (RiskModelCalendar) – RiskModelCalendar containing list of dates where model data is expected

upload_data(data, max_asset_batch_size=20000)

Upload risk model data to existing risk model in Marquee

Parameters:
  • data (Union[RiskModelData, Dict]) –

    complete or partial risk model data for uploading on given date includes: date, and one or more of: factorData, assetData, covarianceMatrix,

    issuerSpecificCovariance and factorPortfolios. Look at risk model upload documentation for further information on what data can be grouped together if asset data size is above the max asset batch size

  • max_asset_batch_size (int) – size of payload to batch with. Defaults to 20000 assets which works well for models that have factor ids ranging from 1- 3 characters in length. For models with longer factor ids, consider batching with a smaller max asset batch size

If upload universe is over max_asset_batch_size, will batch data in chunks of max_asset_batch_size assets

This function takes risk model data, and if partial requests are necessary, will upload data by
  1. factor data (includes covariance matrix if factor model)

  2. asset data in batches of max_asset_batch_size

  3. issuer specific covariance data in batches of max_asset_batch_size / 2 due to the structure of this data

  4. factor portfolio data in batches of max_asset_batch_size / 2 due to the structure of this data

In the case of repeat identifiers on a given data, the repeated data will replace existing data

upload_partial_data(data, final_upload=None)

Upload partial risk model data to existing risk model in Marquee

Parameters:
  • data (Union[RiskModelData, dict]) – partial risk model data for uploading on given date

  • final_upload (Optional[bool]) – if this is the last upload for the batched subset of data

The models factorData and covarianceMatrix must be uploaded first on given date if repeats in partial

upload, newer posted data will replace existing data on upload day

Deprecated since version 0.9.42: Please use upload_data instead