{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "d7143989",
      "metadata": {},
      "source": [
        "# Model Onboarding\n",
        "\n",
        "Use this notebook for the exposure initial upload and risk dataset creation of a set of factor exposures using daily CSV files.\n",
        "\n",
        "The notebook contains a section that obtains coverage statistics of the created risk dataset against the uploaded exposures."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "8c171e70",
      "metadata": {},
      "outputs": [],
      "source": [
        "import datetime as dt\n",
        "import itertools as it\n",
        "import shutil\n",
        "import tempfile\n",
        "\n",
        "from pathlib import Path\n",
        "\n",
        "import polars as pl\n",
        "from tqdm import tqdm\n",
        "\n",
        "from bayesline.apiclient import BayeslineApiClient\n",
        "from bayesline.api.equity import (\n",
        "    CategoricalExposureGroupSettings,\n",
        "    ContinuousExposureGroupSettings,\n",
        "    ExposureSettings, \n",
        "    RiskDatasetSettings,\n",
        "    RiskDatasetReferencedExposureSettings,\n",
        "    RiskDatasetUploadedExposureSettings,\n",
        "    UniverseSettings,\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "f9df046c",
      "metadata": {
        "tags": [
          "skip-execution"
        ]
      },
      "outputs": [],
      "source": [
        "bln = BayeslineApiClient.new_client(\n",
        "    endpoint=\"https://[ENDPOINT]\",\n",
        "    api_key=\"[API-KEY]\",\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a10c5e5b",
      "metadata": {},
      "source": [
        "## Exposure Upload"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "ff3976a2",
      "metadata": {
        "tags": [
          "skip-execution"
        ]
      },
      "outputs": [],
      "source": [
        "exposure_dir = Path(\"/PATH/TO/EXPOSURES\")\n",
        "assert exposure_dir.exists()\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "bd81cd30",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposure_dataset_name = \"My-Exposures\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "3a9b7f55",
      "metadata": {},
      "source": [
        "Below creates a new exposure uploader for the chosen dataset name `My-Exposures`. See the [Uploaders Tutorial](https://docs.bayesline.com/0.12.1/notebooks/tutorial_uploaders.html) for a deep dive into the `Uploaders API`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "cdbba084",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposure_uploader = bln.equity.uploaders.get_data_type(\"exposures\")\n",
        "uploader = exposure_uploader.create_or_replace_dataset(exposure_dataset_name)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "19f12a05",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Found 31 files.\n",
            "Years: 2025\n"
          ]
        }
      ],
      "source": [
        "# list all csv files and group them by year\n",
        "# expects file pattern \"*_YYYY-MM-DD.csv\"\n",
        "\n",
        "all_files = sorted(exposure_dir.glob(\"*.csv\"))\n",
        "existing_files = uploader.get_staging_results().keys()\n",
        "\n",
        "files_by_year = {\n",
        "    k: list(v) \n",
        "    for k, v in \n",
        "    it.groupby(all_files, lambda x: int(x.name.split(\"_\")[1].split(\".\")[0].split(\"-\")[0]))\n",
        "}\n",
        "files_by_year.keys()\n",
        "\n",
        "print(f\"Found {len(all_files)} files.\")\n",
        "print(\"Years:\", \", \".join(map(str, files_by_year)))"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8dec97fe",
      "metadata": {},
      "source": [
        "Below we batch the daily CSV files into annual Parquet files. Creating batched Parquet files is recommended as it will be much faster to upload and process compared to individually uploading daily files."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "00fdb93b",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Created temp directory: /tmp/tmpa3432t88\n"
          ]
        }
      ],
      "source": [
        "temp_dir = Path(tempfile.mkdtemp())\n",
        "print(f\"Created temp directory: {temp_dir}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "712bc6ae",
      "metadata": {
        "tags": [
          "remove-output"
        ]
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "  0%|          | 0/1 [00:00<?, ?it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "100%|██████████| 1/1 [00:00<00:00,  1.94it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "100%|██████████| 1/1 [00:00<00:00,  1.94it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\n"
          ]
        }
      ],
      "source": [
        "for year, files in tqdm(files_by_year.items()):\n",
        "    parquet_path = temp_dir / f\"exposures_{year}.parquet\"\n",
        "    df = pl.scan_csv(files, try_parse_dates=True)\n",
        "    df.sink_parquet(parquet_path)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "id": "de7a1ad9",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 11)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>asset_id</th><th>market^Market</th><th>style^Size</th><th>style^Value</th><th>style^Growth</th><th>style^Volatility</th><th>style^Momentum</th><th>style^Dividend</th><th>style^Leverage</th><th>asset_id_type</th></tr><tr><td>date</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td></tr></thead><tbody><tr><td>2025-05-01</td><td>&quot;IC000B1557&quot;</td><td>1.0</td><td>0.470459</td><td>1.3535156</td><td>-0.217041</td><td>-0.161893</td><td>0.6529541</td><td>0.066101</td><td>0.4144516</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC0010CEFE&quot;</td><td>1.0</td><td>-1.489746</td><td>-0.119995</td><td>-0.66748</td><td>2.1402996</td><td>-0.570312</td><td>0.029068</td><td>-0.318726</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC0021AFB7&quot;</td><td>1.0</td><td>-0.437744</td><td>-0.035828</td><td>-0.196411</td><td>-0.998698</td><td>0.69751</td><td>0.221924</td><td>-0.07859</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC002CE8B9&quot;</td><td>1.0</td><td>0.147491</td><td>0.7685547</td><td>-0.57666</td><td>1.3333334</td><td>-0.302246</td><td>0.21106</td><td>0.202637</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC002DC646&quot;</td><td>1.0</td><td>0.188354</td><td>0.014297</td><td>0.083984</td><td>-0.636719</td><td>-0.506348</td><td>0.33667</td><td>0.064331</td><td>&quot;bayesid&quot;</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 11)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ asset_id  ┆ market^Ma ┆ style^Siz ┆ … ┆ style^Mom ┆ style^Div ┆ style^Lev ┆ asset_id │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ e         ┆   ┆ entum     ┆ idend     ┆ erage     ┆ _type    │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---      │\n",
              "│           ┆           ┆ f64       ┆ f64       ┆   ┆ f64       ┆ f64       ┆ f64       ┆ str      │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-05-0 ┆ IC000B155 ┆ 1.0       ┆ 0.470459  ┆ … ┆ 0.6529541 ┆ 0.066101  ┆ 0.4144516 ┆ bayesid  │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC0010CEF ┆ 1.0       ┆ -1.489746 ┆ … ┆ -0.570312 ┆ 0.029068  ┆ -0.318726 ┆ bayesid  │\n",
              "│ 1         ┆ E         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC0021AFB ┆ 1.0       ┆ -0.437744 ┆ … ┆ 0.69751   ┆ 0.221924  ┆ -0.07859  ┆ bayesid  │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC002CE8B ┆ 1.0       ┆ 0.147491  ┆ … ┆ -0.302246 ┆ 0.21106   ┆ 0.202637  ┆ bayesid  │\n",
              "│ 1         ┆ 9         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC002DC64 ┆ 1.0       ┆ 0.188354  ┆ … ┆ -0.506348 ┆ 0.33667   ┆ 0.064331  ┆ bayesid  │\n",
              "│ 1         ┆ 6         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df.head().collect()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "fce0eb74",
      "metadata": {},
      "source": [
        "As a next step we iterate over the annual Parquet files and stage them in the uploader. See the [Uploaders Tutorial](https://docs.bayesline.com/0.12.1/notebooks/tutorial_uploaders.html#staging-data) for more details on the *staging* and *commit* concepts."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "4451beea",
      "metadata": {},
      "outputs": [],
      "source": [
        "for year in files_by_year.keys():\n",
        "    parquet = temp_dir / f\"exposures_{year}.parquet\"\n",
        "    result = uploader.stage_file(parquet)\n",
        "    assert result.success"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "af0518bf",
      "metadata": {},
      "outputs": [],
      "source": [
        "shutil.rmtree(temp_dir)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "698baf54",
      "metadata": {},
      "source": [
        "### Data Commit\n",
        "\n",
        "Next up we commit the data into versioned storage."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "id": "452cfd2f",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "UploadCommitResult(version=1, committed_names=['exposures_2025'])"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.commit(mode=\"append\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "609b4a90",
      "metadata": {},
      "source": [
        "## Risk Dataset Creation\n",
        "\n",
        "Below creates a new *Risk Dataset* using above uploaded exposures. See the [Risk Datasets Tutorial](https://docs.bayesline.com/0.12.1/notebooks/tutorial_datasets.html) for a deep dive into the `Risk Datasets API`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "id": "087f2205",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_datasets = bln.equity.riskdatasets"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "id": "66e8be64",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "{'Bayesline-US-All-1y': 'ready', 'Bayesline-US-500-1y': 'ready'}"
            ]
          },
          "execution_count": 15,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# exisint datasets which can be used as reference datasets\n",
        "risk_datasets.get_dataset_names()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "id": "137d023d",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_dataset_name = \"My-Risk-Dataset\""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "id": "6b766822",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_datasets.delete_dataset_if_exists(risk_dataset_name)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b5f8400f",
      "metadata": {},
      "source": [
        "We need to specify an assignment of which exposures are *style*, *region*, etc. Below lists those *factor groups* as they were extracted from the uploaded exposures."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "id": "d73f4b80",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (2, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>factor_group</th></tr><tr><td>str</td></tr></thead><tbody><tr><td>&quot;market&quot;</td></tr><tr><td>&quot;style&quot;</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (2, 1)\n",
              "┌──────────────┐\n",
              "│ factor_group │\n",
              "│ ---          │\n",
              "│ str          │\n",
              "╞══════════════╡\n",
              "│ market       │\n",
              "│ style        │\n",
              "└──────────────┘"
            ]
          },
          "execution_count": 18,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.get_data(columns=[\"factor_group\"], unique=True).collect()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "9742bf9c",
      "metadata": {},
      "source": [
        "See API docs for [`RiskDatasetSettings`](https://docs.bayesline.com/0.12.1/_autosummary/bayesline.api.equity.RiskDatasetSettings.html) and [`RiskDatasetUploadedExposureSettings`](https://docs.bayesline.com/0.12.1/_autosummary/bayesline.api.equity.RiskDatasetUploadedExposureSettings.html) for other potential settings.\n",
        "\n",
        "In this recipe we pass through the industry hierarchy from the reference risk dataset, choose that our uploaded exposures make up the estimation universe and that we take the union of all assets across all of our exposures as the overall asset filter."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "id": "69808839",
      "metadata": {},
      "outputs": [],
      "source": [
        "settings = RiskDatasetSettings(\n",
        "    reference_dataset=\"Bayesline-US-All-1y\",\n",
        "    exposures=[\n",
        "        RiskDatasetReferencedExposureSettings(\n",
        "            categorical_factor_groups=[\"trbc\"],\n",
        "            continuous_factor_groups=[],\n",
        "        ),\n",
        "        RiskDatasetUploadedExposureSettings(\n",
        "            exposure_source=exposure_dataset_name,\n",
        "            continuous_factor_groups=[\"market\", \"style\"],\n",
        "            categorical_factor_groups=[],\n",
        "        ),\n",
        "    ],\n",
        "    trim_start_date=dt.date(2025, 5, 1),\n",
        "    trim_assets=\"asset_union\",\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "id": "f13db242",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (3_314_993, 23)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>bayesid</th><th>market.Market</th><th>style.Size</th><th>style.Value</th><th>style.Growth</th><th>style.Volatility</th><th>style.Momentum</th><th>style.Dividend</th><th>style.Leverage</th><th>trbc.Energy</th><th>trbc.Basic Materials</th><th>trbc.Industrials</th><th>trbc.Consumer Cyclicals</th><th>trbc.Consumer Non-Cyclicals</th><th>trbc.Financials</th><th>trbc.Healthcare</th><th>trbc.Technology</th><th>trbc.Utilities</th><th>trbc.Real Estate</th><th>trbc.Institutions, Associations &amp; Organizations</th><th>trbc.Government Activity</th><th>trbc.Academic &amp; Educational Services</th></tr><tr><td>date</td><td>str</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2025-03-31</td><td>&quot;IC000B1557&quot;</td><td>1.0</td><td>0.497044</td><td>1.906133</td><td>0.064068</td><td>-0.302732</td><td>0.84596</td><td>0.173826</td><td>0.657222</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC0010CEFE&quot;</td><td>1.0</td><td>-1.149755</td><td>0.171263</td><td>-0.491703</td><td>1.963476</td><td>-0.703627</td><td>-0.408496</td><td>-0.424522</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC0021AFB7&quot;</td><td>1.0</td><td>-0.254564</td><td>0.274217</td><td>0.091377</td><td>-1.774809</td><td>1.370458</td><td>0.003792</td><td>-0.065819</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC002CE8B9&quot;</td><td>1.0</td><td>0.22734</td><td>1.222545</td><td>-0.381269</td><td>1.084742</td><td>0.496732</td><td>-0.003303</td><td>0.345131</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC002DC646&quot;</td><td>1.0</td><td>0.285613</td><td>0.336384</td><td>0.443385</td><td>-1.073175</td><td>-0.374783</td><td>0.252381</td><td>0.150731</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE60191&quot;</td><td>1.0</td><td>-0.24419</td><td>-1.231946</td><td>-0.513139</td><td>1.476245</td><td>0.852316</td><td>-0.066321</td><td>0.942271</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE938FD&quot;</td><td>1.0</td><td>1.003459</td><td>0.356885</td><td>-2.267819</td><td>-0.686203</td><td>0.196818</td><td>1.228335</td><td>1.071229</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE94AED&quot;</td><td>1.0</td><td>0.215615</td><td>0.905442</td><td>0.211854</td><td>-1.360461</td><td>1.64925</td><td>1.031272</td><td>1.152186</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFEBBB38&quot;</td><td>1.0</td><td>0.653238</td><td>0.281869</td><td>0.675328</td><td>-1.508441</td><td>0.726801</td><td>0.391964</td><td>0.323002</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFF2F5AD&quot;</td><td>1.0</td><td>-0.453108</td><td>0.21082</td><td>-0.031443</td><td>0.816633</td><td>0.134513</td><td>-0.115014</td><td>-0.126875</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (3_314_993, 23)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ bayesid   ┆ market.Ma ┆ style.Siz ┆ … ┆ trbc.Real ┆ trbc.Inst ┆ trbc.Gove ┆ trbc.Aca │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ e         ┆   ┆ Estate    ┆ itutions, ┆ rnment    ┆ demic &  │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ Associati ┆ Activity  ┆ Educatio │\n",
              "│           ┆           ┆ f32       ┆ f32       ┆   ┆ f32       ┆ on…       ┆ ---       ┆ nal Se…  │\n",
              "│           ┆           ┆           ┆           ┆   ┆           ┆ ---       ┆ f32       ┆ ---      │\n",
              "│           ┆           ┆           ┆           ┆   ┆           ┆ f32       ┆           ┆ f32      │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-03-3 ┆ IC000B155 ┆ 1.0       ┆ 0.497044  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC0010CEF ┆ 1.0       ┆ -1.149755 ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ E         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC0021AFB ┆ 1.0       ┆ -0.254564 ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC002CE8B ┆ 1.0       ┆ 0.22734   ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 9         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC002DC64 ┆ 1.0       ┆ 0.285613  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 6         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ …         ┆ …         ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …        │\n",
              "│ 2026-03-3 ┆ ICFFE6019 ┆ 1.0       ┆ -0.24419  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 1         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFE938F ┆ 1.0       ┆ 1.003459  ┆ … ┆ 1.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFE94AE ┆ 1.0       ┆ 0.215615  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFEBBB3 ┆ 1.0       ┆ 0.653238  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFF2F5A ┆ 1.0       ┆ -0.453108 ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 20,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "exposures_api = bln.equity.exposures.load(\n",
        "    ExposureSettings(\n",
        "        exposures=[\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"market\"),\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"style\", standardize_method=\"equal_weighted\"),\n",
        "            CategoricalExposureGroupSettings(hierarchy=\"trbc\"),\n",
        "        ],\n",
        "    )\n",
        ")\n",
        "exposures_api.get(UniverseSettings(dataset=\"Bayesline-US-All-1y\"), standardize_universe=None)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e24b59f1",
      "metadata": {},
      "source": [
        "Lastly we create the new dataset followed by describing its properties after creation."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "id": "77962366",
      "metadata": {},
      "outputs": [],
      "source": [
        "my_risk_dataset = risk_datasets.create_dataset(risk_dataset_name, settings)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "c23d53a1",
      "metadata": {},
      "source": [
        "### Data Coverage\n",
        "\n",
        "As a first step after the risk dataset creation we cross check the asset coverage compared to our raw exposure upload."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "id": "0564a0a0",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>n_assets</th><th>min_exposure</th><th>max_exposure</th><th>mean_exposure</th><th>std_exposure</th></tr><tr><td>date</td><td>i64</td><td>f32</td><td>f32</td><td>f64</td><td>f64</td></tr></thead><tbody><tr><td>2025-05-01</td><td>9108</td><td>-3.0</td><td>3.0</td><td>0.07378</td><td>0.871145</td></tr><tr><td>2025-05-02</td><td>9107</td><td>-3.0</td><td>3.0</td><td>0.075814</td><td>0.869677</td></tr><tr><td>2025-05-03</td><td>9106</td><td>-3.0</td><td>3.0</td><td>0.075695</td><td>0.869591</td></tr><tr><td>2025-05-04</td><td>9106</td><td>-3.0</td><td>3.0</td><td>0.075698</td><td>0.869592</td></tr><tr><td>2025-05-05</td><td>9107</td><td>-3.0</td><td>3.0</td><td>0.080996</td><td>0.868992</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 6)\n",
              "┌────────────┬──────────┬──────────────┬──────────────┬───────────────┬──────────────┐\n",
              "│ date       ┆ n_assets ┆ min_exposure ┆ max_exposure ┆ mean_exposure ┆ std_exposure │\n",
              "│ ---        ┆ ---      ┆ ---          ┆ ---          ┆ ---           ┆ ---          │\n",
              "│ date       ┆ i64      ┆ f32          ┆ f32          ┆ f64           ┆ f64          │\n",
              "╞════════════╪══════════╪══════════════╪══════════════╪═══════════════╪══════════════╡\n",
              "│ 2025-05-01 ┆ 9108     ┆ -3.0         ┆ 3.0          ┆ 0.07378       ┆ 0.871145     │\n",
              "│ 2025-05-02 ┆ 9107     ┆ -3.0         ┆ 3.0          ┆ 0.075814      ┆ 0.869677     │\n",
              "│ 2025-05-03 ┆ 9106     ┆ -3.0         ┆ 3.0          ┆ 0.075695      ┆ 0.869591     │\n",
              "│ 2025-05-04 ┆ 9106     ┆ -3.0         ┆ 3.0          ┆ 0.075698      ┆ 0.869592     │\n",
              "│ 2025-05-05 ┆ 9107     ┆ -3.0         ┆ 3.0          ┆ 0.080996      ┆ 0.868992     │\n",
              "└────────────┴──────────┴──────────────┴──────────────┴───────────────┴──────────────┘"
            ]
          },
          "execution_count": 22,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "upload_stats_df = uploader.get_data_detail_summary()\n",
        "upload_stats_df.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "id": "350c984e",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (2_258_896, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>asset_id</th><th>asset_id_type</th><th>factor_group</th><th>factor</th><th>exposure</th></tr><tr><td>date</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f32</td></tr></thead><tbody><tr><td>2025-05-01</td><td>&quot;IC000B1557&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;market&quot;</td><td>&quot;Market&quot;</td><td>1.0</td></tr><tr><td>2025-05-01</td><td>&quot;IC0010CEFE&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;market&quot;</td><td>&quot;Market&quot;</td><td>1.0</td></tr><tr><td>2025-05-01</td><td>&quot;IC0021AFB7&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;market&quot;</td><td>&quot;Market&quot;</td><td>1.0</td></tr><tr><td>2025-05-01</td><td>&quot;IC002CE8B9&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;market&quot;</td><td>&quot;Market&quot;</td><td>1.0</td></tr><tr><td>2025-05-01</td><td>&quot;IC002DC646&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;market&quot;</td><td>&quot;Market&quot;</td><td>1.0</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2025-05-31</td><td>&quot;IC95A06496&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>-0.117798</td></tr><tr><td>2025-05-31</td><td>&quot;IC95AC841D&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>0.391357</td></tr><tr><td>2025-05-31</td><td>&quot;IC95AD394E&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>0.486816</td></tr><tr><td>2025-05-31</td><td>&quot;IC95AED504&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>-1.547852</td></tr><tr><td>2025-05-31</td><td>&quot;IC95AEEB70&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>0.044647</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (2_258_896, 6)\n",
              "┌────────────┬────────────┬───────────────┬──────────────┬────────┬───────────┐\n",
              "│ date       ┆ asset_id   ┆ asset_id_type ┆ factor_group ┆ factor ┆ exposure  │\n",
              "│ ---        ┆ ---        ┆ ---           ┆ ---          ┆ ---    ┆ ---       │\n",
              "│ date       ┆ str        ┆ str           ┆ str          ┆ str    ┆ f32       │\n",
              "╞════════════╪════════════╪═══════════════╪══════════════╪════════╪═══════════╡\n",
              "│ 2025-05-01 ┆ IC000B1557 ┆ bayesid       ┆ market       ┆ Market ┆ 1.0       │\n",
              "│ 2025-05-01 ┆ IC0010CEFE ┆ bayesid       ┆ market       ┆ Market ┆ 1.0       │\n",
              "│ 2025-05-01 ┆ IC0021AFB7 ┆ bayesid       ┆ market       ┆ Market ┆ 1.0       │\n",
              "│ 2025-05-01 ┆ IC002CE8B9 ┆ bayesid       ┆ market       ┆ Market ┆ 1.0       │\n",
              "│ 2025-05-01 ┆ IC002DC646 ┆ bayesid       ┆ market       ┆ Market ┆ 1.0       │\n",
              "│ …          ┆ …          ┆ …             ┆ …            ┆ …      ┆ …         │\n",
              "│ 2025-05-31 ┆ IC95A06496 ┆ bayesid       ┆ style        ┆ Value  ┆ -0.117798 │\n",
              "│ 2025-05-31 ┆ IC95AC841D ┆ bayesid       ┆ style        ┆ Value  ┆ 0.391357  │\n",
              "│ 2025-05-31 ┆ IC95AD394E ┆ bayesid       ┆ style        ┆ Value  ┆ 0.486816  │\n",
              "│ 2025-05-31 ┆ IC95AED504 ┆ bayesid       ┆ style        ┆ Value  ┆ -1.547852 │\n",
              "│ 2025-05-31 ┆ IC95AEEB70 ┆ bayesid       ┆ style        ┆ Value  ┆ 0.044647  │\n",
              "└────────────┴────────────┴───────────────┴──────────────┴────────┴───────────┘"
            ]
          },
          "execution_count": 23,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.get_data().collect()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "id": "7e996f64",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Categorical Hierarchies ['trbc']\n"
          ]
        }
      ],
      "source": [
        "# note that the industry and region hierarchy names tie out with the factor groups we specified above\n",
        "print(f\"Categorical Hierarchies {list(my_risk_dataset.describe().universe_settings_menu.categorical_hierarchies.keys())}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "id": "9854d32d",
      "metadata": {},
      "outputs": [],
      "source": [
        "universe_settings = UniverseSettings(dataset=risk_dataset_name)\n",
        "\n",
        "universe_api = bln.equity.universes.load(universe_settings)\n",
        "universe_counts = universe_api.counts()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "id": "0e88cd72",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Axes: xlabel='date'>"
            ]
          },
          "execution_count": 26,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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6oqIiAjMnj0biYmJ0Gq1WLlyJWJiYpCUlFSmfSQnJ8POzg4eHh6lbvfx8UFycrL+51mzZuHnn3/Gjh070KtXL4wePRpffPHFQ/c7b948uLu7678CAgKeqEciIiIyfUa5QOeKFSvw6quvwt/fH9bW1mjYsCH69euHuLg4gz7P1KlT9d+Hh4cjNzcX8+fPx+uvv/7A+0+ePBkTJ07U/6xWqxl0iIiIFMooE4+DgoKwd+9e5OTkICEhAYcOHUJRURFq1KhRpsf7+vqisLAQmZmZpW5PSUmBr6/vQx/XrFkz3Lx5ExqN5oHb7e3t4ebmVuqLiIiIlMmo6+Q4OzvDz88PGRkZiI6ORo8ePcr0uEaNGsHW1hY7d+7U33bhwgXEx8cjIiLioY87fvw4KlSoAHt7+6eunYiIiMybUYaroqOjIYRArVq1cPnyZUyaNAmhoaEYOnQoACA9PR3x8fFITEwEIAUYQDqC4+vrC3d3dwwbNgwTJ05ExYoV4ebmhnHjxiEiIkJ/ZtVvv/2GlJQUNG/eHA4ODtixYwfmzp2Lt956yxgtERERkZkxSsjJysrC5MmTcfPmTVSsWBG9evXCBx98AFtbWwDA5s2b9YEHAPr27QsAmD59OmbMmAEA+PTTT2FlZYVevXpBo9GgU6dO+Oqrr/SPsbW1xaJFizBhwgQIIRAcHIxPPvkEI0aMMEZLREREZGYMvk6OOeE6OUREROZHtnVyiIiIiEwBQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKRJDDhERESkSQw4REREpEkMOERERKZKN3AUQEREZklarRVFRkdxl0FOwtbWFtbX1U++HIYeIiBRBCIHk5GRkZmbKXQoZgIeHB3x9faFSqZ54Hww5RESkCCUBx9vbG05OTk/15kjyEUIg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",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "(\n",
        "    universe_counts\n",
        "    .join(\n",
        "        upload_stats_df.select(\"date\", \"n_assets\").rename({\"n_assets\": \"Uploaded\"}),\n",
        "        on=\"date\",\n",
        "        how=\"left\",\n",
        "    )\n",
        "    .sort(\"date\")\n",
        "    .to_pandas()\n",
        "    .set_index(\"date\")\n",
        "    .plot()\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "461ee52f",
      "metadata": {},
      "source": [
        "We can pull some exposures from the new risk dataset to verify."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "id": "f6b61958",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposures_api = bln.equity.exposures.load(\n",
        "    ExposureSettings(\n",
        "        exposures=[\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"market\"),\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"style\", standardize_method=\"equal_weighted\"),\n",
        "        ],\n",
        "    )\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "id": "e7b460da",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 10)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>bayesid</th><th>market.Market</th><th>style.Dividend</th><th>style.Growth</th><th>style.Leverage</th><th>style.Momentum</th><th>style.Size</th><th>style.Value</th><th>style.Volatility</th></tr><tr><td>date</td><td>str</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2025-05-31</td><td>&quot;ICFFE54368&quot;</td><td>1.0</td><td>-0.844673</td><td>-0.702657</td><td>0.09314</td><td>-1.146021</td><td>0.961601</td><td>-2.420599</td><td>0.370371</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFE60191&quot;</td><td>1.0</td><td>-0.108341</td><td>-0.06861</td><td>-0.165233</td><td>0.387932</td><td>-0.501643</td><td>0.245517</td><td>0.649549</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFE94AED&quot;</td><td>1.0</td><td>1.232193</td><td>0.387093</td><td>1.139678</td><td>0.701652</td><td>0.17948</td><td>1.008006</td><td>-1.267246</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFEBBB38&quot;</td><td>1.0</td><td>0.399928</td><td>0.679241</td><td>0.292809</td><td>0.703576</td><td>0.634793</td><td>0.375516</td><td>-1.352361</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFF2F5AD&quot;</td><td>1.0</td><td>-0.116948</td><td>-0.081254</td><td>-0.172843</td><td>-0.798941</td><td>-0.52135</td><td>0.24332</td><td>0.19702</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 10)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ bayesid   ┆ market.Ma ┆ style.Div ┆ … ┆ style.Mom ┆ style.Siz ┆ style.Val ┆ style.Vo │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ idend     ┆   ┆ entum     ┆ e         ┆ ue        ┆ latility │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---      │\n",
              "│           ┆           ┆ f32       ┆ f32       ┆   ┆ f32       ┆ f32       ┆ f32       ┆ f32      │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-05-3 ┆ ICFFE5436 ┆ 1.0       ┆ -0.844673 ┆ … ┆ -1.146021 ┆ 0.961601  ┆ -2.420599 ┆ 0.370371 │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-3 ┆ ICFFE6019 ┆ 1.0       ┆ -0.108341 ┆ … ┆ 0.387932  ┆ -0.501643 ┆ 0.245517  ┆ 0.649549 │\n",
              "│ 1         ┆ 1         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-3 ┆ ICFFE94AE ┆ 1.0       ┆ 1.232193  ┆ … ┆ 0.701652  ┆ 0.17948   ┆ 1.008006  ┆ -1.26724 │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆ 6        │\n",
              "│ 2025-05-3 ┆ ICFFEBBB3 ┆ 1.0       ┆ 0.399928  ┆ … ┆ 0.703576  ┆ 0.634793  ┆ 0.375516  ┆ -1.35236 │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆ 1        │\n",
              "│ 2025-05-3 ┆ ICFFF2F5A ┆ 1.0       ┆ -0.116948 ┆ … ┆ -0.798941 ┆ -0.52135  ┆ 0.24332   ┆ 0.19702  │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 28,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df = exposures_api.get(universe_settings, standardize_universe=None)\n",
        "\n",
        "df.tail()"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": ".venv",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.11.15"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}