6. Economic Cost/Lost Value (ECLV) Plots

6.1. Description

Economic Cost/Loss Value (ECLV) Plot, also called the Relative value score (Richardson, 2000; Wilks, 2001) is useful in decision making. This plot produces the relative value curve for deterministic forecasts based on counts in a 2x2 contingency table along with the expected cost-to-loss ratio.

For more information on Economic Cost/Loss Value Plots, please refer to the METviewer documentation.

The ECLV score can range from -\(\infty\) to 1.

../_images/custom_eclv.png

6.2. Example

6.2.1. Sample Data

The data is text output from MET in columnar format. The sample data used to create these plots is available in the METplotpy repository, where the ECLV plot scripts are located:

$METPLOTPY_BASE/test/eclv/eclv.data

$METPLOTPY_BASE is the directory where the METplotpy code is saved:

e.g.

/usr/path/to/METplotpy if the source code was cloned or forked from the Github repository

or

/usr/path/to/METplotpy-x.y.z if the source code was downloaded as a zip or gzip’d tar file from the Release link of the Github repository. The x.y.z is the release number.

6.2.2. Configuration Files

The ECLV plot utilizes YAML configuration files to indicate where input data is located and to set plot attributes. These plot attributes correspond to values that can be set via the METviewer tool. YAML is a recursive acronym for “YAML Ain’t Markup Language” and according to yaml.org, it is a “human-friendly data serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted. Two configuration files are required. The first is a default configuration file, eclv_defaults.yaml, which is found in the $METPLOTPY_BASE/metplotpy/plots/config directory. $METPLOTPY_BASE indicates the directory where the METplotpy source code has been saved. All default configuration files are located in the $METPLOTPY_BASE/metplotpy/plots/config directory. Default configuration files are automatically loaded by the plotting code and do not need to be explicitly specified when generating a plot.

The second required configuration file is a user-supplied “custom” configuration file. This file is used to customize/override the default settings in the eclv_defaults.yaml file.

6.3. METplus Configuration

6.3.1. Default Configuration File

The following is the mandatory, eclv_defaults.yaml configuration file along with another mandatory configuration file, custom_eclv.yaml . These configuration files serve as a starting point for creating an eclv plot.

NOTE: The eclv_defaults.yaml default configuration file is automatically loaded by eclv.py.

alpha: 0.05
caption_align: 0
caption_col: '#333333'
caption_offset: 3
caption_size: 0.8
caption_weight: 1
cex: 1
colors: []
con_series: []
dump_points_1: 'False'
event_equal: 'False'
fixed_vars_vals_input: {}
grid_col: '#f5274a'
grid_lty: 3
grid_lwd: 1
grid_on: 'True'
grid_x: listX
legend_box: o
legend_inset:
  x: 0.0
  y: -0.25
legend_ncol: 3
legend_size: 0.8
line_type: N/A
log_filename: stdout
log_level: error
mar:
- 8
- 4
- 5
- 4
method: ''
mgp:
- 1
- 1
- 0
num_iterations: 1
num_threads: -1
plot_ci: []
plot_disp: []
plot_filename: /tmp/eclv.png
plot_height: 8.5
plot_res: 72
plot_stat: median
plot_type: png16m
plot_units: in
plot_width: 11.0
random_seed: null
series_line_style: []
series_line_width: []
series_order: []
series_symbols: []
series_type: []
series_val_1: {}
show_nstats: 'False'
title: test title
title_align: 0.5
title_offset: -2
title_size: 1.4
title_weight: 2.0
user_legend: []
variance_inflation_factor: 'True'
x2lab_align: 0.5
x2lab_offset: -0.5
x2lab_size: 0.8
x2lab_weight: 1
x2tlab_horiz: 0.5
x2tlab_orient: 1
x2tlab_perp: 1
x2tlab_size: 0.8
xaxis: test x_label
xaxis_reverse: 'False'
xlab_align: 0.5
xlab_offset: 2
xlab_size: 1
xlab_weight: 1
xlim: []
xtlab_decim: 0
xtlab_horiz: 0.5
xtlab_orient: 1
xtlab_perp: -0.75
xtlab_size: 1
yaxis_1: test y_label
ylab_align: 0.5
ylab_offset: -2
ylab_size: 1
ylab_weight: 1
ylim: []
ytlab_horiz: 0.5
ytlab_orient: 1
ytlab_perp: 0.5
ytlab_size: 1

In the default config file, logging is set to stdout and the log level is ERROR (i.e. only log messages of type ERROR will be logged). If the log_filename and log_level are not specified in the custom configuration file, these settings will be used.

6.3.2. Custom Configuration File

As mentioned above a second, mandatory configuration file is required. This is used to customize the settings to the ECLV plot. The custom_eclv.yaml file is included with the source code and looks like the following:

caption_align: 0.0
caption_col: '#333333'
caption_offset: 3.0
caption_size: 0.8
caption_weight: 1
cex: 1
colors:
- '#ff0000'
- '#8000ff'
con_series:
- 1
- 1
create_html: 'False'
dump_points_1: 'False'
fixed_vars_vals_input: {}
grid_col: '#cccccc'
grid_lty: 3
grid_lwd: 1
grid_on: 'True'
grid_x: listX
legend_box: o
legend_inset:
  x: 0.0
  y: -0.25
legend_ncol: 3
legend_size: 0.8
line_type: None
mar:
- 8.0
- 4.0
- 5.0
- 4.0
method: bca
mgp:
- 1.0
- 1.0
- 0.0
num_iterations: 1
num_threads: -1
plot_caption: ''
plot_ci:
- std
- std
plot_disp:
- 'True'
- 'True'
plot_height: 8.5
plot_res: 72
plot_stat: median
plot_type: png16m
plot_units: in
plot_width: 11.0
# Optional, uncomment and set to directory to store the .points1 file
# that is used by METviewer (created when dump_points_1 is set to True)
# if dump_points_1 is True and this is uncommented, the points1 file
# will be saved in the default location (i.e. where the input data file is stored).
#points_path: /dir_to_save_points1_file
random_seed: null
series_line_style:
- '-'
- '-'
series_line_width:
- 1
- 1
series_order:
- 1
- 2
series_symbols:
- .
- .
series_type:
- b
- b
series_val_1:
  model:
  - SREF
  fcst_lev:
  - P500
  - P850
show_nstats: 'True'
show_signif:
- 'False'
- 'False'
title: Simple ECLV plot for ECLV data
title_align: 0.5
title_offset: -2
title_size: 1.4
title_weight: 2.0
user_legend: []
variance_inflation_factor: 'False'
vert_plot: 'False'
xaxis: test x_label
xaxis_reverse: 'False'
xlab_align: 0.5
xlab_offset: 2
xlab_size: 1
xlab_weight: 1
xlim: []
xtlab_decim: 0
xtlab_horiz: 0.5
xtlab_orient: 1
xtlab_perp: -0.75
xtlab_size: 1
yaxis_1: test y_label
ylab_align: 0.5
ylab_offset: -2
ylab_size: 1
ylab_weight: 1
ylim: []
ytlab_horiz: 0.5
ytlab_orient: 1
ytlab_perp: 0.5
ytlab_size: 1

stat_input: ./eclv.data
plot_filename: ./eclv.png

# To save your log output to a file, specify a path and filename and uncomment the line below.  Make sure you have
# permissions to the directory you specify.  The default, as specified in the default config file is stdout.
#log_filename: ./eclv.log

# To change the log level, specify a log level: debug, info, warning, error and uncomment the line below.
#  Debug and info log level will produce more log output.
#log_level: WARNING

Copy this custom config file from the directory where the source code was saved to the working directory:

cp $METPLOTPY_BASE/test/eclv/custom_eclv.yaml $WORKING_DIR/custom_eclv.yaml

Modify the stat_input setting in the $METPLOTPY_BASE/test/eclv/custom_eclv.yaml file to explicitly point to the $METPLOTPY_BASE/test/eclv/ directory (where the custom config files and sample data reside). Replace the relative path .eclv.data with the full path $METPLOTPY_BASE/test/eclv/eclv.data (including replacing $METPLOTPY_BASE with the full path to the METplotpy installation on the system). Modify the plot_filename setting to point to the output path where the plot will be saved, including the name of the plot.

For example:

stat_input: /username/myworkspace/METplotpy/test/eclv/eclv.data

plot_filename: /username/working_dir/output_plots/custom_eclv.png

This is where /username/myworkspace/METplotpy is $METPLOTPY_BASE and /username/working_dir is $WORKING_DIR. Make sure that the $WORKING_DIR directory that is specified exists and has the appropriate read and write permissions. The path listed for plot_filename may be changed to the output directory of one’s choosing. If this is not set, then the plot_filename setting specified in the $METPLOTPY_BASE/metplotpy/plots/config/eclv_defaults.yaml configuration file will be used.

To save the intermediate .points1 file (used by METviewer and useful for debugging), set the dump_points_1 setting to True. Uncomment or add (if it doesn’t exist) the points_path setting:

dump_points_1: ‘True’

points_path: ‘/dir_to_save_points1_file’

Replace the /dir_to_save_points1_file to the same directory where the .points1 file is saved. If points_path is commented out (indicated by a ‘#’ symbol in front of it), remove the ‘#’ symbol to uncomment the points_path so that it will be used by the code. Make sure that this directory exists and has the appropriate read and write permissions. NOTE: the points_path setting is optional and does not need to be defined in the configuration files unless saving the intermediate .points1 file is desired.

To save the log output to a file, uncomment the log_filename entry and specify the path and name of the log file. Select a directory with the appropriate read and write privileges. To modify the verbosity of logging than what is set in the default config file, uncomment the log_level entry and specify the log level (debug and info are higher verbosity, warning and error are lower verbosity).

6.3.3. Using Defaults

There isn’t a set of “default” values to create a meaningful ECLV plot. Use the combination of the default_eclv.yaml and custom_eclv.yaml file to create a sample ECLV plot.

6.4. Run from the Command Line

To generate a meaningful ECLV plot (i.e. using settings in the eclv_defaults.yaml and custom_eclv.yaml configuration files), perform the following:

  • If using the conda environment, verify the conda environment is running and has has the required Python packages outlined in the requirements section.

  • Set the METPLOTPY_BASE environment variable to point to $METPLOTPY_BASE.

    For the ksh environment:

    export METPLOTPY_BASE=$METPLOTPY_BASE
    

    For the csh environment:

    setenv METPLOTPY_BASE $METPLOTPY_BASE
    

    Recall that $METPLOTPY_BASE is the directory path indicating where the METplotpy source code was saved.

  • Run the following on the command line:

    python $METPLOTPY_BASE/metplotpy/plots/eclv/eclv.py $WORKING_DIR/custom_eclv.yaml
    

    This will create a PNG file, custom_eclv.png, in the directory that was specified in the plot_filename setting of the custom_eclv.yaml config file:

    ../_images/custom_eclv.png