Catalog-based Forecast Evaluation

This example shows how to evaluate a catalog-based forecasting using the Number test. This test is the simplest of the evaluations.

Overview:
  1. Define forecast properties (time horizon, spatial region, etc).

  2. Access catalog from ComCat

  3. Filter catalog to be consistent with the forecast properties

  4. Apply catalog-based number test to catalog

  5. Visualize results for catalog-based forecast

Load required libraries

Most of the core functionality can be imported from the top-level csep package. Utilities are available from the csep.utils subpackage.

import csep
from csep.core import regions, catalog_evaluations
from csep.utils import datasets, time_utils

Define start and end times of forecast

Forecasts should define a time horizon in which they are valid. The choice is flexible for catalog-based forecasts, because the catalogs can be filtered to accommodate multiple end-times. Conceptually, these should be separate forecasts.

Define spatial and magnitude regions

Before we can compute the bin-wise rates we need to define a spatial region and a set of magnitude bin edges. The magnitude bin edges # are the lower bound (inclusive) except for the last bin, which is treated as extending to infinity. We can bind these # to the forecast object. This can also be done by passing them as keyword arguments into csep.load_catalog_forecast().

# Magnitude bins properties
min_mw = 4.95
max_mw = 8.95
dmw = 0.1

# Create space and magnitude regions. The forecast is already filtered in space and magnitude
magnitudes = regions.magnitude_bins(min_mw, max_mw, dmw)
region = regions.california_relm_region()

# Bind region information to the forecast (this will be used for binning of the catalogs)
space_magnitude_region = regions.create_space_magnitude_region(region, magnitudes)

Load catalog forecast

To reduce the file size of this example, we’ve already filtered the catalogs to the appropriate magnitudes and spatial locations. The original forecast was computed for 1 year following the start date, so we still need to filter the catalog in time. We can do this by passing a list of filtering arguments to the forecast or updating the class.

By default, the forecast loads catalogs on-demand, so the filters are applied as the catalog loads. On-demand means that until we loop over the forecast in some capacity, none of the catalogs are actually loaded.

More fine-grain control and optimizations can be achieved by creating a csep.core.forecasts.CatalogForecast directly.

forecast = csep.load_catalog_forecast(datasets.ucerf3_ascii_format_landers_fname,
                                      start_time = start_time, end_time = end_time,
                                      region = space_magnitude_region,
                                      apply_filters = True)

# Assign filters to forecast
forecast.filters = [f'origin_time >= {forecast.start_epoch}', f'origin_time < {forecast.end_epoch}']

Obtain evaluation catalog from ComCat

The csep.core.forecasts.CatalogForecast provides a method to compute the expected number of events in spatial cells. This requires a region with magnitude information.

We need to filter the ComCat catalog to be consistent with the forecast. This can be done either through the ComCat API or using catalog filtering strings. Here we’ll use the ComCat API to make the data access quicker for this example. We still need to filter the observed catalog in space though.

# Obtain Comcat catalog and filter to region.
comcat_catalog = csep.query_comcat(start_time, end_time, min_magnitude=forecast.min_magnitude)

# Filter observed catalog using the same region as the forecast
comcat_catalog = comcat_catalog.filter_spatial(forecast.region)
print(comcat_catalog)

# Plot the catalog
comcat_catalog.plot()
catalog forecast evaluation
Fetched ComCat catalog in 0.4889993667602539 seconds.

Downloaded catalog from ComCat with following parameters
Start Date: 1992-06-28 12:00:45+00:00
End Date: 1992-07-24 18:14:36.250000+00:00
Min Latitude: 33.901 and Max Latitude: 36.705
Min Longitude: -118.067 and Max Longitude: -116.285
Min Magnitude: 4.95
Found 19 events in the ComCat catalog.

        Name: None

        Start Date: 1992-06-28 12:00:45+00:00
        End Date: 1992-07-24 18:14:36.250000+00:00

        Latitude: (33.901, 36.705)
        Longitude: (-118.067, -116.285)

        Min Mw: 4.95
        Max Mw: 6.3

        Event Count: 19


<GeoAxesSubplot: >

Perform number test

We can perform the Number test on the catalog based forecast using the observed catalog we obtained from Comcat.

Processed 1 catalogs in 0.0017533302307128906 seconds
Processed 2 catalogs in 0.002214670181274414 seconds
Processed 3 catalogs in 0.0026438236236572266 seconds
Processed 4 catalogs in 0.0029468536376953125 seconds
Processed 5 catalogs in 0.0032181739807128906 seconds
Processed 6 catalogs in 0.0036077499389648438 seconds
Processed 7 catalogs in 0.003906726837158203 seconds
Processed 8 catalogs in 0.004314422607421875 seconds
Processed 9 catalogs in 0.005311250686645508 seconds
Processed 10 catalogs in 0.0057392120361328125 seconds
Processed 20 catalogs in 0.009640932083129883 seconds
Processed 30 catalogs in 0.013673782348632812 seconds
Processed 40 catalogs in 0.017459392547607422 seconds
Processed 50 catalogs in 0.021770715713500977 seconds
Processed 60 catalogs in 0.02541208267211914 seconds
Processed 70 catalogs in 0.02891826629638672 seconds
Processed 80 catalogs in 0.03271079063415527 seconds
Processed 90 catalogs in 0.03676629066467285 seconds
Processed 100 catalogs in 0.04024004936218262 seconds
Processed 200 catalogs in 0.07474875450134277 seconds
Processed 300 catalogs in 0.1129601001739502 seconds
Processed 400 catalogs in 0.1501612663269043 seconds
Processed 500 catalogs in 0.21821928024291992 seconds
Processed 600 catalogs in 0.25480031967163086 seconds
Processed 700 catalogs in 0.2917606830596924 seconds
Processed 800 catalogs in 0.36252403259277344 seconds
Processed 900 catalogs in 0.39827704429626465 seconds
Processed 1000 catalogs in 0.43509364128112793 seconds
Processed 2000 catalogs in 0.9465980529785156 seconds
Processed 3000 catalogs in 1.41019868850708 seconds
Processed 4000 catalogs in 1.9003190994262695 seconds
Processed 5000 catalogs in 2.376476764678955 seconds
Processed 6000 catalogs in 2.849745273590088 seconds
Processed 7000 catalogs in 3.3491804599761963 seconds
Processed 8000 catalogs in 3.7894980907440186 seconds
Processed 9000 catalogs in 4.315096616744995 seconds
Processed 10000 catalogs in 4.774747371673584 seconds

Plot number test result

We can create a simple visualization of the number test from the evaluation result class.

ax = number_test_result.plot(show=True)
Number Test

Total running time of the script: ( 0 minutes 11.774 seconds)

Gallery generated by Sphinx-Gallery