├── .gitattributes ├── .gitignore ├── README.md ├── applications ├── avalanche.ipynb ├── avalanche_forecasts │ ├── banff-yoho-kootenay_2011-2012.json │ ├── banff-yoho-kootenay_2012-2013.json │ ├── banff-yoho-kootenay_2013-2014.json │ ├── banff-yoho-kootenay_2014-2015.json │ ├── banff-yoho-kootenay_2015-2016.json │ ├── banff-yoho-kootenay_2016-2017.json │ ├── banff-yoho-kootenay_2017-2018.json │ ├── banff-yoho-kootenay_2018-2019.json │ ├── cariboos_2011-2012.json │ ├── cariboos_2012-2013.json │ ├── cariboos_2013-2014.json │ ├── cariboos_2014-2015.json │ ├── cariboos_2015-2016.json │ ├── cariboos_2016-2017.json │ ├── cariboos_2017-2018.json │ ├── cariboos_2018-2019.json │ ├── chic-chocs_2011-2012.json │ ├── chic-chocs_2012-2013.json │ ├── chic-chocs_2013-2014.json │ ├── chic-chocs_2014-2015.json │ ├── chic-chocs_2015-2016.json │ ├── chic-chocs_2016-2017.json │ ├── chic-chocs_2017-2018.json │ ├── chic-chocs_2018-2019.json │ ├── glacier_2011-2012.json │ ├── glacier_2012-2013.json │ ├── glacier_2013-2014.json │ ├── glacier_2014-2015.json │ ├── glacier_2015-2016.json │ ├── glacier_2016-2017.json │ ├── glacier_2017-2018.json │ ├── glacier_2018-2019.json │ ├── hankin-evelyn_2011-2012.json │ ├── hankin-evelyn_2012-2013.json │ ├── hankin-evelyn_2013-2014.json │ ├── hankin-evelyn_2014-2015.json │ ├── hankin-evelyn_2015-2016.json │ ├── hankin-evelyn_2016-2017.json │ ├── hankin-evelyn_2017-2018.json │ ├── hankin-evelyn_2018-2019.json │ ├── jasper_2011-2012.json │ ├── jasper_2012-2013.json │ ├── jasper_2013-2014.json │ ├── jasper_2014-2015.json │ ├── jasper_2015-2016.json │ ├── jasper_2016-2017.json │ ├── jasper_2017-2018.json │ ├── jasper_2018-2019.json │ ├── kakwa_2011-2012.json │ ├── kakwa_2012-2013.json │ ├── kakwa_2013-2014.json │ ├── kakwa_2014-2015.json │ ├── kakwa_2015-2016.json │ ├── kakwa_2016-2017.json │ ├── kakwa_2017-2018.json │ ├── kakwa_2018-2019.json │ ├── kananaskis_2011-2012.json │ ├── kananaskis_2012-2013.json │ ├── kananaskis_2013-2014.json │ ├── kananaskis_2014-2015.json │ ├── kananaskis_2015-2016.json │ ├── kananaskis_2016-2017.json │ ├── kananaskis_2017-2018.json │ ├── kananaskis_2018-2019.json │ ├── kootenay-boundary_2011-2012.json │ ├── kootenay-boundary_2012-2013.json │ ├── kootenay-boundary_2013-2014.json │ ├── kootenay-boundary_2014-2015.json │ ├── kootenay-boundary_2015-2016.json │ ├── kootenay-boundary_2016-2017.json │ ├── kootenay-boundary_2017-2018.json │ ├── kootenay-boundary_2018-2019.json │ ├── little-yoho_2011-2012.json │ ├── little-yoho_2012-2013.json │ ├── little-yoho_2013-2014.json │ ├── little-yoho_2014-2015.json │ ├── little-yoho_2015-2016.json │ ├── little-yoho_2016-2017.json │ ├── little-yoho_2017-2018.json │ ├── little-yoho_2018-2019.json │ ├── lizard-range_2011-2012.json │ ├── lizard-range_2012-2013.json │ ├── lizard-range_2013-2014.json │ ├── lizard-range_2014-2015.json │ ├── lizard-range_2015-2016.json │ ├── lizard-range_2016-2017.json │ ├── lizard-range_2017-2018.json │ ├── lizard-range_2018-2019.json │ ├── north-columbia_2011-2012.json │ ├── north-columbia_2012-2013.json │ ├── north-columbia_2013-2014.json │ ├── north-columbia_2014-2015.json │ ├── north-columbia_2015-2016.json │ ├── north-columbia_2016-2017.json │ ├── north-columbia_2017-2018.json │ ├── north-columbia_2018-2019.json │ ├── north-rockies_2011-2012.json │ ├── north-rockies_2012-2013.json │ ├── north-rockies_2013-2014.json │ ├── north-rockies_2014-2015.json │ ├── north-rockies_2015-2016.json │ ├── north-rockies_2016-2017.json │ ├── north-rockies_2017-2018.json │ ├── north-rockies_2018-2019.json │ ├── northwest-coastal_2011-2012.json │ ├── northwest-coastal_2012-2013.json │ ├── northwest-coastal_2013-2014.json │ ├── northwest-coastal_2014-2015.json │ ├── northwest-coastal_2015-2016.json │ ├── northwest-coastal_2016-2017.json │ ├── northwest-coastal_2017-2018.json │ ├── northwest-coastal_2018-2019.json │ ├── northwest-inland_2011-2012.json │ ├── northwest-inland_2012-2013.json │ ├── northwest-inland_2013-2014.json │ ├── northwest-inland_2014-2015.json │ ├── northwest-inland_2015-2016.json │ ├── northwest-inland_2016-2017.json │ ├── northwest-inland_2017-2018.json │ ├── northwest-inland_2018-2019.json │ ├── purcells_2011-2012.json │ ├── purcells_2012-2013.json │ ├── purcells_2013-2014.json │ ├── purcells_2014-2015.json │ ├── purcells_2015-2016.json │ ├── purcells_2016-2017.json │ ├── purcells_2017-2018.json │ ├── purcells_2018-2019.json │ ├── renshaw_2011-2012.json │ ├── renshaw_2012-2013.json │ ├── renshaw_2013-2014.json │ ├── renshaw_2014-2015.json │ ├── renshaw_2015-2016.json │ ├── renshaw_2016-2017.json │ ├── renshaw_2017-2018.json │ ├── renshaw_2018-2019.json │ ├── sea-to-sky_2011-2012.json │ ├── sea-to-sky_2012-2013.json │ ├── sea-to-sky_2013-2014.json │ ├── sea-to-sky_2014-2015.json │ ├── sea-to-sky_2015-2016.json │ ├── sea-to-sky_2016-2017.json │ ├── sea-to-sky_2017-2018.json │ ├── sea-to-sky_2018-2019.json │ ├── south-coast-inland_2011-2012.json │ ├── south-coast-inland_2012-2013.json │ ├── south-coast-inland_2013-2014.json │ ├── south-coast-inland_2014-2015.json │ ├── south-coast-inland_2015-2016.json │ ├── south-coast-inland_2016-2017.json │ ├── south-coast-inland_2017-2018.json │ ├── south-coast-inland_2018-2019.json │ ├── south-coast_2011-2012.json │ ├── south-coast_2012-2013.json │ ├── south-coast_2013-2014.json │ ├── south-coast_2014-2015.json │ ├── south-coast_2015-2016.json │ ├── south-coast_2016-2017.json │ ├── south-coast_2017-2018.json │ ├── south-coast_2018-2019.json │ ├── south-columbia_2011-2012.json │ ├── south-columbia_2012-2013.json │ ├── south-columbia_2013-2014.json │ ├── south-columbia_2014-2015.json │ ├── south-columbia_2015-2016.json │ ├── south-columbia_2016-2017.json │ ├── south-columbia_2017-2018.json │ ├── south-columbia_2018-2019.json │ ├── south-rockies_2011-2012.json │ ├── south-rockies_2012-2013.json │ ├── south-rockies_2013-2014.json │ ├── south-rockies_2014-2015.json │ ├── south-rockies_2015-2016.json │ ├── south-rockies_2016-2017.json │ ├── south-rockies_2017-2018.json │ ├── south-rockies_2018-2019.json │ ├── telkwa_2011-2012.json │ ├── telkwa_2012-2013.json │ ├── telkwa_2013-2014.json │ ├── telkwa_2014-2015.json │ ├── telkwa_2015-2016.json │ ├── telkwa_2016-2017.json │ ├── telkwa_2017-2018.json │ ├── telkwa_2018-2019.json │ ├── vancouver-island_2011-2012.json │ ├── vancouver-island_2012-2013.json │ ├── vancouver-island_2013-2014.json │ ├── vancouver-island_2014-2015.json │ ├── vancouver-island_2015-2016.json │ ├── vancouver-island_2016-2017.json │ ├── vancouver-island_2017-2018.json │ ├── vancouver-island_2018-2019.json │ ├── waterton_2011-2012.json │ ├── waterton_2012-2013.json │ ├── waterton_2013-2014.json │ ├── waterton_2014-2015.json │ ├── waterton_2015-2016.json │ ├── waterton_2016-2017.json │ ├── waterton_2017-2018.json │ ├── waterton_2018-2019.json │ ├── yukon_2011-2012.json │ ├── yukon_2012-2013.json │ ├── yukon_2013-2014.json │ ├── yukon_2014-2015.json │ ├── yukon_2015-2016.json │ ├── yukon_2016-2017.json │ ├── yukon_2017-2018.json │ └── yukon_2018-2019.json ├── avalanche_incidents.csv ├── classification.ipynb ├── heterogeneity.ipynb ├── maps.ipynb ├── ml_in_economics.ipynb ├── recidivism.ipynb ├── regression.ipynb └── visualization_rules.ipynb ├── index.ipynb ├── overview.ipynb ├── pandas ├── basics.ipynb ├── data_clean.ipynb ├── groupby.ipynb ├── index.ipynb ├── intro.ipynb ├── matplotlib.ipynb ├── merge.ipynb ├── reshape.ipynb ├── storage_formats.ipynb ├── the_index.ipynb └── timeseries.ipynb ├── problem_sets ├── ahs-doc.csv ├── ahs-train.csv ├── problem_set_1.ipynb ├── problem_set_2.ipynb ├── problem_set_3.ipynb ├── problem_set_4.ipynb ├── problem_set_5.ipynb ├── problem_set_6.ipynb ├── problem_set_7.ipynb └── problem_set_8.ipynb ├── pyfun ├── basics.ipynb ├── collections.ipynb ├── control_flow.ipynb ├── functions.ipynb ├── index.ipynb ├── intro.ipynb └── local_install.ipynb ├── scientific ├── applied_linalg.ipynb ├── index.ipynb ├── numpy_arrays.ipynb ├── optimization.ipynb ├── plotting.ipynb └── randomness.ipynb └── utilities.ipynb /.gitattributes: -------------------------------------------------------------------------------- 1 | *.ipynb filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.ipynb_checkpoints 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # lecture-datascience-notebooks -------------------------------------------------------------------------------- /applications/avalanche_forecasts/banff-yoho-kootenay_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/banff-yoho-kootenay_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/banff-yoho-kootenay_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/banff-yoho-kootenay_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/banff-yoho-kootenay_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/banff-yoho-kootenay_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/banff-yoho-kootenay_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/banff-yoho-kootenay_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/chic-chocs_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/chic-chocs_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/chic-chocs_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/chic-chocs_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/chic-chocs_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/chic-chocs_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/chic-chocs_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/chic-chocs_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/glacier_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/glacier_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/glacier_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/glacier_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/glacier_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/glacier_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/glacier_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/glacier_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/hankin-evelyn_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/hankin-evelyn_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/hankin-evelyn_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/hankin-evelyn_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/hankin-evelyn_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/hankin-evelyn_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/hankin-evelyn_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/hankin-evelyn_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/jasper_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/jasper_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/jasper_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/jasper_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/jasper_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/jasper_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/jasper_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/jasper_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/kakwa_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/kakwa_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/kakwa_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/kakwa_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/kakwa_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/kakwa_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/kakwa_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/kakwa_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/little-yoho_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/little-yoho_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/little-yoho_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/little-yoho_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/little-yoho_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/little-yoho_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/little-yoho_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/little-yoho_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/lizard-range_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/lizard-range_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/lizard-range_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/lizard-range_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/lizard-range_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/north-rockies_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/north-rockies_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/north-rockies_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/north-rockies_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/north-rockies_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/north-rockies_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/north-rockies_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/north-rockies_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/renshaw_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/renshaw_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/renshaw_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/renshaw_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/renshaw_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/renshaw_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/renshaw_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/renshaw_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/south-coast-inland_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/south-coast-inland_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/south-coast-inland_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/south-coast-inland_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/south-coast-inland_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/telkwa_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/telkwa_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/telkwa_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/telkwa_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/telkwa_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/telkwa_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/telkwa_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/telkwa_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/vancouver-island_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/vancouver-island_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/vancouver-island_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/vancouver-island_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/vancouver-island_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/vancouver-island_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/vancouver-island_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/vancouver-island_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/waterton_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/waterton_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/waterton_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/waterton_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/waterton_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/waterton_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/waterton_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/waterton_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/yukon_2011-2012.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/yukon_2012-2013.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/yukon_2013-2014.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/yukon_2014-2015.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/yukon_2015-2016.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/yukon_2016-2017.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/yukon_2017-2018.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/avalanche_forecasts/yukon_2018-2019.json: -------------------------------------------------------------------------------- 1 | [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] -------------------------------------------------------------------------------- /applications/regression.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Regression\n", 8 | "\n", 9 | "**Prerequisites**\n", 10 | "\n", 11 | "- scientific/applied_linalg \n", 12 | "- scientific/optimization \n", 13 | "\n", 14 | "\n", 15 | "**Outcomes**\n", 16 | "\n", 17 | "- Recall linear regression from linear algebra \n", 18 | "- Know what feature engineering is and how feature engineering can be automated by neural networks \n", 19 | "- Understand the related concepts of overfitting and regularization \n", 20 | "- Understand lasso regression, its relation to linear regression \n", 21 | "- Understand regression forests, its relation to linear regression \n", 22 | "- Understand the basics of the multi-layer perceptron \n", 23 | "- Use scikit-learn to fit linear regression, lasso, regression forests, and multi-layer perceptron to data on housing prices near Seattle, WA " 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "## Introduction to Regression\n", 31 | "\n", 32 | "The goal of regression analysis is to provide an accurate mapping from one or\n", 33 | "more input variables (called features in machine learning or exogenous\n", 34 | "variables in econometrics) to a continuous output variable (called the label or\n", 35 | "target in machine learning and the endogenous variable in\n", 36 | "econometrics).\n", 37 | "\n", 38 | "In this lecture we will study some of the most fundamental and widely used\n", 39 | "regression algorithms\n", 40 | "\n", 41 | "We will follow the same general pattern when we learn each algorithm:\n", 42 | "\n", 43 | "- Describe the mathematical foundation for the algorithm \n", 44 | "- Use the [scikit-learn](https://scikit-learn.org/stable/) python package to\n", 45 | " apply the algorithm to a real world dataset on house prices in California " 46 | ] 47 | }, 48 | { 49 | "cell_type": "markdown", 50 | "metadata": {}, 51 | "source": [ 52 | "### Dataset\n", 53 | "\n", 54 | "Let’s load the dataset and take a quick look at what our task is" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": { 61 | "hide-output": false 62 | }, 63 | "outputs": [], 64 | "source": [ 65 | "import pandas as pd\n", 66 | "import numpy as np\n", 67 | "import matplotlib.pyplot as plt\n", 68 | "import seaborn as sns\n", 69 | "sns.set() # set up plotting theme to make charts look nice\n", 70 | "%matplotlib inline\n", 71 | "\n", 72 | "# we will import all these here to ensure that they are loaded, but\n", 73 | "# will usually re-import close to where they are used to make clear\n", 74 | "# where the functions come from\n", 75 | "from sklearn import (\n", 76 | " linear_model, metrics, neural_network, pipeline, model_selection\n", 77 | ")\n", 78 | "\n", 79 | "url = \"https://storage.googleapis.com/qeds/data/kc_house_data.csv\"\n", 80 | "df = pd.read_csv(url)\n", 81 | "df.info()" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "This dataset contains sales prices on houses in King County (which\n", 89 | "include Seattle),\n", 90 | "Washington, from May 2014 to May 2015. The data comes from\n", 91 | "[Kaggle](https://www.kaggle.com/harlfoxem/housesalesprediction)\n", 92 | ". Variable definitions and additional documentation are available at\n", 93 | "that link." 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": null, 99 | "metadata": { 100 | "hide-output": false 101 | }, 102 | "outputs": [], 103 | "source": [ 104 | "X = df.drop([\"price\", \"date\", \"id\"], axis=1).copy()\n", 105 | "# convert everything to be a float for later on\n", 106 | "for col in list(X):\n", 107 | " X[col] = X[col].astype(float)\n", 108 | "X.head()" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": null, 114 | "metadata": { 115 | "hide-output": false 116 | }, 117 | "outputs": [], 118 | "source": [ 119 | "# notice the log here!\n", 120 | "y = np.log(df[\"price\"])\n", 121 | "df[\"log_price\"] = y\n", 122 | "y.head()" 123 | ] 124 | }, 125 | { 126 | "cell_type": "markdown", 127 | "metadata": {}, 128 | "source": [ 129 | "While we will be using all the variables in `X` in our regression models,\n", 130 | "we will explain some algorithms using only the `sqft_living` variable\n", 131 | "\n", 132 | "Here’s what the log house price looks like against `sqft_living`:" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": { 139 | "hide-output": false 140 | }, 141 | "outputs": [], 142 | "source": [ 143 | "def var_scatter(df, ax=None, var=\"sqft_living\"):\n", 144 | " if ax is None:\n", 145 | " _, ax = plt.subplots(figsize=(8, 6))\n", 146 | " df.plot.scatter(x=var , y=\"log_price\", alpha=0.35, s=1.5, ax=ax)\n", 147 | "\n", 148 | " return ax\n", 149 | "\n", 150 | "var_scatter(df);" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "## Linear Regression\n", 158 | "\n", 159 | "Let’s dive in by studying the [“Hello World”](https://en.wikipedia.org/wiki/%22Hello,_World!%22_program) of regression\n", 160 | "algorithms: linear regression\n", 161 | "\n", 162 | "Suppose we would like to predict the log of the sale price of a home, given\n", 163 | "only the livable square footage of the home\n", 164 | "\n", 165 | "The linear regression model for this situation is\n", 166 | "\n", 167 | "$$\n", 168 | "\\log(\\text{price}) = \\beta_0 + \\beta_1 \\text{sqft_living} + \\epsilon\n", 169 | "$$\n", 170 | "\n", 171 | "$ \\beta_0 $ and $ \\beta_1 $ are called parameters (also coefficients or\n", 172 | "weights) and it is the task of the machine learning algorithm to find the values\n", 173 | "for the parameters that best fit the data\n", 174 | "\n", 175 | "$ \\epsilon $ is the error term. It would be unusual for the observed\n", 176 | "$ \\log(\\text{price}) $ will be an exact linear function of\n", 177 | "$ \\text{sqft_living} $. The error term captures the deviation of\n", 178 | "$ \\log(\\text{price}) $ from a linear function of $ \\text{sqft_living} $.\n", 179 | "\n", 180 | "The linear regression algorithm will choose the parameters to minimize the\n", 181 | "*mean squared error* (MSE) function, which for our example is written\n", 182 | "\n", 183 | "$$\n", 184 | "\\frac{1}{N} \\sum_{i=1}^N \\left(\\log(\\text{price}_i) - (\\beta_0 + \\beta_1 \\text{sqft_living}_i) \\right)^2\n", 185 | "$$\n", 186 | "\n", 187 | "The output of this algorithm is the straight line (hence linear) that passes as\n", 188 | "close to the points on our scatter chart as possible\n", 189 | "\n", 190 | "The `sns.lmplot` function below will plot our scatter chart and draw the\n", 191 | "optimal linear regression line through the data" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": null, 197 | "metadata": { 198 | "hide-output": false 199 | }, 200 | "outputs": [], 201 | "source": [ 202 | "sns.lmplot(\n", 203 | " data=df, x=\"sqft_living\", y=\"log_price\", height=6,\n", 204 | " scatter_kws=dict(s=1.5, alpha=0.35)\n", 205 | ");" 206 | ] 207 | }, 208 | { 209 | "cell_type": "markdown", 210 | "metadata": {}, 211 | "source": [ 212 | "Let’s use `sklearn` to replicate the figure ourselves\n", 213 | "\n", 214 | "First we fit the model" 215 | ] 216 | }, 217 | { 218 | "cell_type": "code", 219 | "execution_count": null, 220 | "metadata": { 221 | "hide-output": false 222 | }, 223 | "outputs": [], 224 | "source": [ 225 | "# import\n", 226 | "from sklearn import linear_model\n", 227 | "\n", 228 | "# construct the model instance\n", 229 | "sqft_lr_model = linear_model.LinearRegression()\n", 230 | "\n", 231 | "# fit the model\n", 232 | "sqft_lr_model.fit(X[[\"sqft_living\"]], y)\n", 233 | "\n", 234 | "# print the coefficients\n", 235 | "beta_0 = sqft_lr_model.intercept_\n", 236 | "beta_1 = sqft_lr_model.coef_\n", 237 | "\n", 238 | "print(f\"Fit model: log(price) = {beta_0} + {beta_1} sqft_living\")" 239 | ] 240 | }, 241 | { 242 | "cell_type": "markdown", 243 | "metadata": {}, 244 | "source": [ 245 | "Then we construct the plot" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": null, 251 | "metadata": { 252 | "hide-output": false 253 | }, 254 | "outputs": [], 255 | "source": [ 256 | "ax = var_scatter(df)\n", 257 | "\n", 258 | "# points for the line\n", 259 | "x = np.array([0, df[\"sqft_living\"].max()])\n", 260 | "ax.plot(x, beta_0 + beta_1*x)" 261 | ] 262 | }, 263 | { 264 | "cell_type": "markdown", 265 | "metadata": {}, 266 | "source": [ 267 | "We can call the `predict` method on our model to evaluate the model at\n", 268 | "arbitrary points\n", 269 | "\n", 270 | "For example, we can ask the model to predict the sale price of a 5,000 square\n", 271 | "foot home" 272 | ] 273 | }, 274 | { 275 | "cell_type": "code", 276 | "execution_count": null, 277 | "metadata": { 278 | "hide-output": false 279 | }, 280 | "outputs": [], 281 | "source": [ 282 | "# note, the argument needs to be two-dimensional, you'll see why shortly\n", 283 | "logp_5000 = sqft_lr_model.predict([[5000]])[0]\n", 284 | "print(f\"The model predicts a 5,000 sq. foot home would cost {np.exp(logp_5000)} dollars\")" 285 | ] 286 | }, 287 | { 288 | "cell_type": "markdown", 289 | "metadata": {}, 290 | "source": [ 291 | "
\n", 292 | "\n", 293 | "**Check for understanding**\n", 294 | "\n", 295 | "Use the `sqft_lr_model` that we fit to generate predictions for all data points\n", 296 | "in our sample\n", 297 | "\n", 298 | "Note that you need to pass the `predict` a DataFrame (not Series)\n", 299 | "containing the `sqft_living` column – (see how we passed that to `.fit`\n", 300 | "above for help)\n", 301 | "\n", 302 | "Make a scatter chart with the actual data and the predictions on the same\n", 303 | "figure. Does it look familiar?\n", 304 | "\n", 305 | "When making the scatter for model predictions we recommend passing\n", 306 | "`c=\"red\"` and `alpha=0.25` so you can distinguish the data from\n", 307 | "predictions\n", 308 | "\n", 309 | "\n", 310 | "
" 311 | ] 312 | }, 313 | { 314 | "cell_type": "code", 315 | "execution_count": null, 316 | "metadata": { 317 | "hide-output": false 318 | }, 319 | "outputs": [], 320 | "source": [ 321 | "# generate predictions\n", 322 | "\n", 323 | "# plot\n", 324 | "fig, ax = plt.subplots()\n", 325 | "\n", 326 | "# make scatter of data\n", 327 | "\n", 328 | "# make scatter of predictions" 329 | ] 330 | }, 331 | { 332 | "cell_type": "markdown", 333 | "metadata": {}, 334 | "source": [ 335 | "
\n", 336 | "\n", 337 | "
" 338 | ] 339 | }, 340 | { 341 | "cell_type": "markdown", 342 | "metadata": {}, 343 | "source": [ 344 | "
\n", 345 | "\n", 346 | "**Check for understanding**\n", 347 | "\n", 348 | "Use the `metrics.mean_squared_error` function to evaluate the loss\n", 349 | "function used by `sklearn` when it fit the model for us\n", 350 | "\n", 351 | "Read the docstring to learn what the arguments to that function should be\n", 352 | "\n", 353 | "\n", 354 | "
" 355 | ] 356 | }, 357 | { 358 | "cell_type": "code", 359 | "execution_count": null, 360 | "metadata": { 361 | "hide-output": false 362 | }, 363 | "outputs": [], 364 | "source": [ 365 | "from sklearn import metrics\n", 366 | "\n", 367 | "# your code here" 368 | ] 369 | }, 370 | { 371 | "cell_type": "markdown", 372 | "metadata": {}, 373 | "source": [ 374 | "
\n", 375 | "\n", 376 | "
" 377 | ] 378 | }, 379 | { 380 | "cell_type": "markdown", 381 | "metadata": {}, 382 | "source": [ 383 | "### Multivariate linear regression\n", 384 | "\n", 385 | "The example we have been working with is referred to as univariate linear\n", 386 | "regression because we used a single feature\n", 387 | "\n", 388 | "In practice more features would be used\n", 389 | "\n", 390 | "Suppose that in addition to `sqft_living` we also wanted to use the `bathrooms` variable\n", 391 | "\n", 392 | "In this case the linear regression model is\n", 393 | "\n", 394 | "$$\n", 395 | "\\log(\\text{price}) = \\beta_0 + \\beta_1 \\text{sqft_living} +\n", 396 | "\\beta_2 \\text{bathrooms} + \\epsilon\n", 397 | "$$\n", 398 | "\n", 399 | "We could keep adding one variable at a time and adding a new $ \\beta_{j} $ coefficient for the $ j $ th variable, but there’s an easier way\n", 400 | "\n", 401 | "Let’s write this equation in vector/matrix form as\n", 402 | "\n", 403 | "$$\n", 404 | "\\underbrace{\\begin{bmatrix} \\log(\\text{price}_1) \\\\ \\log(\\text{price}_2) \\\\ \\vdots \\\\ \\log(\\text{price}_N)\\end{bmatrix}}_Y = \\underbrace{\\begin{bmatrix} 1 & \\text{sqft_living}_1 & \\text{bathrooms}_1 \\\\ 1 & \\text{sqft_living}_2 & \\text{bathrooms}_2 \\\\ \\vdots & \\vdots & \\vdots \\\\ 1 & \\text{sqft_living}_N & \\text{bathrooms}_N \\end{bmatrix}}_{X} \\underbrace{\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\\\ \\beta_2 \\end{bmatrix}}_{\\beta} + \\epsilon\n", 405 | "$$\n", 406 | "\n", 407 | "Notice that we can add as many columns to $ X $ as we’d like and the linear\n", 408 | "regression model will still be written $ Y = X \\beta + \\epsilon $\n", 409 | "\n", 410 | "The mean squared error loss function for the general model is\n", 411 | "\n", 412 | "$$\n", 413 | "\\frac{1}{N} \\sum_{i=1}^N (y_i - X_i \\beta)^2 = \\frac{1}{N} {|| y - X \\beta||_2}^2\n", 414 | "$$\n", 415 | "\n", 416 | "where $ || \\cdot ||_2 $ is the [l2-norm](http://mathworld.wolfram.com/L2-Norm.html)\n", 417 | "\n", 418 | "Let’s fit the linear regression model using all the columns in `X`" 419 | ] 420 | }, 421 | { 422 | "cell_type": "code", 423 | "execution_count": null, 424 | "metadata": { 425 | "hide-output": false 426 | }, 427 | "outputs": [], 428 | "source": [ 429 | "lr_model = linear_model.LinearRegression()\n", 430 | "lr_model.fit(X, y)" 431 | ] 432 | }, 433 | { 434 | "cell_type": "markdown", 435 | "metadata": {}, 436 | "source": [ 437 | "We just fit a model with 18 variables and it was just as fast and easy as\n", 438 | "fitting the model with 1 variable!\n", 439 | "\n", 440 | "It is difficult to visualize a 18-dimensional model, but just so we can see the\n", 441 | "difference the extra features made let’s make the log price vs `sqft_living`\n", 442 | "one more time, including the prediction from both of our linear models" 443 | ] 444 | }, 445 | { 446 | "cell_type": "code", 447 | "execution_count": null, 448 | "metadata": { 449 | "hide-output": false 450 | }, 451 | "outputs": [], 452 | "source": [ 453 | "ax = var_scatter(df)\n", 454 | "\n", 455 | "def scatter_model(mod, X, ax=None, color=\"green\", x=\"sqft_living\"):\n", 456 | " if ax is None:\n", 457 | " _, ax = plt.subplots()\n", 458 | "\n", 459 | " ax.scatter(X[x], mod.predict(X), c=color, alpha=0.25, s=1)\n", 460 | " return ax\n", 461 | "\n", 462 | "scatter_model(lr_model, X, ax, color=\"green\")\n", 463 | "scatter_model(sqft_lr_model, X[[\"sqft_living\"]], ax, color=\"red\")\n", 464 | "ax.legend([\"data\", \"full model\", \"sqft model\"])" 465 | ] 466 | }, 467 | { 468 | "cell_type": "markdown", 469 | "metadata": {}, 470 | "source": [ 471 | "
\n", 472 | "\n", 473 | "**Check for understanding**\n", 474 | "\n", 475 | "Compare the mean squared error for the `lr_model` and the `sqft_lr_model`\n", 476 | "\n", 477 | "Which model has a better fit? Defend your answer to your neighbor\n", 478 | "\n", 479 | "\n", 480 | "
" 481 | ] 482 | }, 483 | { 484 | "cell_type": "markdown", 485 | "metadata": {}, 486 | "source": [ 487 | "### Nonlinear relationships in linear regression\n", 488 | "\n", 489 | "While it sounds like an oxymoron, it is possible to include non-linear features\n", 490 | "in a linear regression model\n", 491 | "\n", 492 | "The distinguishing feature of the linear regression model is that the each\n", 493 | "prediction is generated by taking the dot product (a linear operator) between a\n", 494 | "feature vector (one row of $ X $) and a coefficient vector ($ \\beta $)\n", 495 | "\n", 496 | "There is, however, no restriction on what element we include in our feature\n", 497 | "vector\n", 498 | "\n", 499 | "Let’s consider an example…\n", 500 | "\n", 501 | "Starting from the `sqft_living` only model, suppose we have a hunch that we\n", 502 | "should also include the *percent of square feed above ground*\n", 503 | "\n", 504 | "This last variable can be computed as `sqft_above / sqft_living`\n", 505 | "\n", 506 | "This second feature is nonlinear, but could easily be included as a column in\n", 507 | "`X`\n", 508 | "\n", 509 | "Let’s see this in action" 510 | ] 511 | }, 512 | { 513 | "cell_type": "code", 514 | "execution_count": null, 515 | "metadata": { 516 | "hide-output": false 517 | }, 518 | "outputs": [], 519 | "source": [ 520 | "X2 = X[[\"sqft_living\"]].copy()\n", 521 | "X2[\"pct_sqft_above\"] = X[\"sqft_above\"] / X[\"sqft_living\"]\n", 522 | "\n", 523 | "sqft_above_lr_model = linear_model.LinearRegression()\n", 524 | "sqft_above_lr_model.fit(X2, y)\n", 525 | "\n", 526 | "new_mse = metrics.mean_squared_error(y, sqft_above_lr_model.predict(X2))\n", 527 | "old_mse = metrics.mean_squared_error(y, sqft_lr_model.predict(X2[[\"sqft_living\"]]))\n", 528 | "print(f\"The mse changed from {old_mse} to {new_mse} by including our new feature\")" 529 | ] 530 | }, 531 | { 532 | "cell_type": "markdown", 533 | "metadata": {}, 534 | "source": [ 535 | "
\n", 536 | "\n", 537 | "**Check for understanding**\n", 538 | "\n", 539 | "Explore how the fit of the full model can be improved by adding additional\n", 540 | "features created from the existing ones\n", 541 | "\n", 542 | "\n", 543 | "
" 544 | ] 545 | }, 546 | { 547 | "cell_type": "code", 548 | "execution_count": null, 549 | "metadata": { 550 | "hide-output": false 551 | }, 552 | "outputs": [], 553 | "source": [ 554 | "# your code here" 555 | ] 556 | }, 557 | { 558 | "cell_type": "markdown", 559 | "metadata": {}, 560 | "source": [ 561 | "
\n", 562 | "\n", 563 | "
" 564 | ] 565 | }, 566 | { 567 | "cell_type": "markdown", 568 | "metadata": {}, 569 | "source": [ 570 | "The process of determining what columns belong in $ X $ is called *feature\n", 571 | "engineering* and is a large part of a machine learning practitioner’s job\n", 572 | "\n", 573 | "You may recall from (or will see in) your econometrics course(s) that\n", 574 | "the choice of which control variables to include in a regression model\n", 575 | "is an important part of applied research" 576 | ] 577 | }, 578 | { 579 | "cell_type": "markdown", 580 | "metadata": {}, 581 | "source": [ 582 | "### Interpretability\n", 583 | "\n", 584 | "Before moving to our next regression model, we want to touch on the idea of\n", 585 | "the **interpretability** of models\n", 586 | "\n", 587 | "A model that is interpretable is a model for which we can analyze the\n", 588 | "coefficients and explain why it makes its predictions\n", 589 | "\n", 590 | "Recall $ \\beta_0 $ and $ \\beta_1 $ from the univariate model\n", 591 | "\n", 592 | "The interpretation of the model is that $ \\beta_0 $ captures the notion of\n", 593 | "the average or starting house price and $ \\beta_1 $ is the additional value\n", 594 | "per square foot\n", 595 | "\n", 596 | "Concretely we have" 597 | ] 598 | }, 599 | { 600 | "cell_type": "code", 601 | "execution_count": null, 602 | "metadata": { 603 | "hide-output": false 604 | }, 605 | "outputs": [], 606 | "source": [ 607 | "beta_0, beta_1" 608 | ] 609 | }, 610 | { 611 | "cell_type": "markdown", 612 | "metadata": {}, 613 | "source": [ 614 | "which means that our model predicts the log price of a house to be 12.22, plus\n", 615 | "an additional 0.0004 for every square foot\n", 616 | "\n", 617 | "Some more exotic machine learning methods are potentially more accurate, but\n", 618 | "less interpretable\n", 619 | "\n", 620 | "The accuracy vs interpretably tradeoff is a hot discussion topic, especially as\n", 621 | "it relates to things like ethics in machine learning and is something you\n", 622 | "should be aware of as continue to learn about these techniques" 623 | ] 624 | }, 625 | { 626 | "cell_type": "markdown", 627 | "metadata": {}, 628 | "source": [ 629 | "## Lasso Regression\n", 630 | "\n", 631 | "Lasso regression is very closely related to linear regression\n", 632 | "\n", 633 | "The lasso model also generates predictions using $ y = X \\beta $, but it\n", 634 | "optimizes over a slightly different loss function\n", 635 | "\n", 636 | "The optimization problem solved by lasso regression can be written\n", 637 | "\n", 638 | "$$\n", 639 | "\\min_{\\beta} {|| X \\beta - y||_2}^2 + \\underbrace{\\alpha {|| \\beta ||_1}}_{\\text{new part}}\n", 640 | "$$\n", 641 | "\n", 642 | "where $ || a ||_1 = \\sum_{i=1}^N | a_i| $ is the [l1-norm](http://mathworld.wolfram.com/L1-Norm.html) and $ \\alpha $ is called the regularization parameter\n", 643 | "\n", 644 | "The additional term penalizes large coefficients and in practice has the effect\n", 645 | "of setting coefficients to zero for features that are not informative about the\n", 646 | "target\n", 647 | "\n", 648 | "Let’s see an example of what this looks like using the full feature set in\n", 649 | "`X`" 650 | ] 651 | }, 652 | { 653 | "cell_type": "code", 654 | "execution_count": null, 655 | "metadata": { 656 | "hide-output": false 657 | }, 658 | "outputs": [], 659 | "source": [ 660 | "lasso_model = linear_model.Lasso()\n", 661 | "lasso_model.fit(X, y)\n", 662 | "\n", 663 | "lasso_coefs = pd.Series(dict(zip(list(X), lasso_model.coef_)))\n", 664 | "lr_coefs = pd.Series(dict(zip(list(X), lr_model.coef_)))\n", 665 | "coefs = pd.DataFrame(dict(lasso=lasso_coefs, linreg=lr_coefs))\n", 666 | "coefs" 667 | ] 668 | }, 669 | { 670 | "cell_type": "markdown", 671 | "metadata": {}, 672 | "source": [ 673 | "Notice that many of the coefficients from the lasso regression have been set to\n", 674 | "zero\n", 675 | "\n", 676 | "The intuition here is that the corresponding features must not have provided\n", 677 | "enough predictive power to be worth considering alongside the other features\n", 678 | "\n", 679 | "The default value for the $ \\alpha $ parameter is 1.0\n", 680 | "\n", 681 | "Larger values of the parameter will cause coefficients to shrink (and maybe\n", 682 | "additional ones to be thrown out)" 683 | ] 684 | }, 685 | { 686 | "cell_type": "code", 687 | "execution_count": null, 688 | "metadata": { 689 | "hide-output": false 690 | }, 691 | "outputs": [], 692 | "source": [ 693 | "# Compute lasso for many alphas (the lasso path)\n", 694 | "from itertools import cycle\n", 695 | "alphas = np.exp(np.linspace(10, -2, 50))\n", 696 | "alphas, coefs_lasso, _ = linear_model.lasso_path(X, y, alphas=alphas, fit_intercept=True, max_iter=10000)\n", 697 | "\n", 698 | "# plotting\n", 699 | "fig = plt.figure(figsize=(12, 8))\n", 700 | "colors = cycle(sns.color_palette(\"colorblind\", 16))\n", 701 | "log_alphas = -np.log10(alphas)\n", 702 | "for coef_l, c, name in zip(coefs_lasso, colors, list(X)):\n", 703 | " plt.plot(log_alphas, coef_l, c=c)\n", 704 | " plt.xlabel('-Log(alpha)')\n", 705 | " plt.ylabel('lasso coefficients')\n", 706 | " plt.title('Lasso Path')\n", 707 | " plt.axis('tight')\n", 708 | " maxabs = np.max(np.abs(coef_l))\n", 709 | " i = [idx for idx in range(len(coef_l)) if abs(coef_l[idx]) >= (0.9*maxabs)][0]\n", 710 | " xnote = log_alphas[i]\n", 711 | " ynote = coef_l[i]\n", 712 | " plt.annotate(name, (xnote, ynote), color=c)" 713 | ] 714 | }, 715 | { 716 | "cell_type": "markdown", 717 | "metadata": {}, 718 | "source": [ 719 | "### Overfitting and regularization\n", 720 | "\n", 721 | "You might be asking yourself “Why would we ever want to throw variables out,\n", 722 | "can’t that only hurt our model?”\n", 723 | "\n", 724 | "The primary answer is to help us avoid a common issue called **overfitting**\n", 725 | "\n", 726 | "Overfitting refers to a model that specializes its coefficients too much on the\n", 727 | "data it was trained on, and then performs poorly when predicting on data\n", 728 | "outside the training set\n", 729 | "\n", 730 | "The extreme example of overfitting is a model that can perfectly memorize the\n", 731 | "training data, but can do no better than just randomly guess when predicting\n", 732 | "on a new observation\n", 733 | "\n", 734 | "The techniques applied to reduce overfitting are known as **regularization**\n", 735 | "\n", 736 | "Regularization is an attempt to limit a model’s ability to specialize too narrowly\n", 737 | "on training data (e.g. limit overfitting) by penalizing extreme values of the\n", 738 | "model’s parameters\n", 739 | "\n", 740 | "The additional term in the lasso regression loss function ($ \\alpha ||\\beta||_1 $)\n", 741 | "is a form of regularization\n", 742 | "\n", 743 | "Let’s demonstrate the overfitting and regularization phenomenon on our housing\n", 744 | "price data as follows:\n", 745 | "\n", 746 | "1. Split the data set into training and testing subsets. We will use the first 50 observations for training, and the rest for testing \n", 747 | "1. Fit the linear regression model and report MSE on training and testing datasets \n", 748 | "1. Fit the lasso model and report the same statistics " 749 | ] 750 | }, 751 | { 752 | "cell_type": "code", 753 | "execution_count": null, 754 | "metadata": { 755 | "hide-output": false 756 | }, 757 | "outputs": [], 758 | "source": [ 759 | "def fit_and_report_mses(mod, X_train, X_test, y_train, y_test):\n", 760 | " mod.fit(X_train, y_train)\n", 761 | " return dict(\n", 762 | " mse_train=metrics.mean_squared_error(y_train, mod.predict(X_train)),\n", 763 | " mse_test=metrics.mean_squared_error(y_test, mod.predict(X_test))\n", 764 | " )\n", 765 | "\n", 766 | "n_test = 50\n", 767 | "X_train = X.iloc[:n_test, :]\n", 768 | "X_test = X.iloc[n_test:, :]\n", 769 | "y_train = y.iloc[:n_test]\n", 770 | "y_test = y.iloc[n_test:]\n", 771 | "\n", 772 | "fit_and_report_mses(linear_model.LinearRegression(), X_train, X_test, y_train, y_test)" 773 | ] 774 | }, 775 | { 776 | "cell_type": "code", 777 | "execution_count": null, 778 | "metadata": { 779 | "hide-output": false 780 | }, 781 | "outputs": [], 782 | "source": [ 783 | "fit_and_report_mses(linear_model.Lasso(), X_train, X_test, y_train, y_test)" 784 | ] 785 | }, 786 | { 787 | "cell_type": "markdown", 788 | "metadata": {}, 789 | "source": [ 790 | "Notice how the MSE on the training dataset was smaller for the linear model\n", 791 | "without the regularization, but that the MSE on the test dataset was much\n", 792 | "higher\n", 793 | "\n", 794 | "This is a strong indication that the linear regression model was\n", 795 | "overfitting\n", 796 | "\n", 797 | "The regularization parameter has a large impact on overfitting" 798 | ] 799 | }, 800 | { 801 | "cell_type": "code", 802 | "execution_count": null, 803 | "metadata": { 804 | "hide-output": false 805 | }, 806 | "outputs": [], 807 | "source": [ 808 | "alphas = np.exp(np.linspace(10, -5, 100))\n", 809 | "mse = pd.DataFrame([fit_and_report_mses(linear_model.Lasso(alpha=alpha, max_iter=50000),\n", 810 | " X_train, X_test, y_train, y_test)\n", 811 | " for alpha in alphas])\n", 812 | "mse[\"log_alpha\"] = -np.log10(alphas)\n", 813 | "fig, ax = plt.subplots(figsize=(10,6))\n", 814 | "colors = sns.color_palette(\"colorblind\", 16)\n", 815 | "mse.plot(x=\"log_alpha\", y=\"mse_test\", c=colors[0], ax=ax)\n", 816 | "mse.plot(x=\"log_alpha\", y=\"mse_train\", c=colors[1], ax=ax)\n", 817 | "ax.set_xlabel(r\"$-\\log(\\alpha)$\")\n", 818 | "ax.set_ylabel(\"MSE\")\n", 819 | "ax.get_legend().remove()\n", 820 | "ax.annotate(\"test\",(mse.log_alpha[15], mse.mse_test[15]),color=colors[0])\n", 821 | "ax.annotate(\"train\",(mse.log_alpha[30], mse.mse_train[30]),color=colors[1])" 822 | ] 823 | }, 824 | { 825 | "cell_type": "markdown", 826 | "metadata": {}, 827 | "source": [ 828 | "### Cross-validation of regularization parameter\n", 829 | "\n", 830 | "As you can see in the above figure, the regularization parameter has a\n", 831 | "large impact on MSE in the test data. Moreoever, the relationship\n", 832 | "between the test data MSE and $ \\alpha $ is complicated and\n", 833 | "non-monotonic. A popular method for choosing the regularization\n", 834 | "parameter is cross-validation. Roughly speaking, cross-validation\n", 835 | "splits the dataset into many training/testing subsets, and then choose\n", 836 | "the value of regularization parameter that minimizes the average\n", 837 | "MSE. More precisely k-fold cross-validation does the following:\n", 838 | "\n", 839 | "1. Partition the dataset randomly into k subsets/”folds” \n", 840 | "1. Compute $ MSE_j(\\alpha)= $ mean squared error in j-th subset\n", 841 | " when using the j-th subset as test data, and other k-1 as training\n", 842 | " data \n", 843 | "1. Minimize average (across folds) MSE $ \\min_\\alpha \\frac{1}{k}\n", 844 | " \\sum_{j=1}^k MSE_j(\\alpha) $ \n", 845 | "\n", 846 | "\n", 847 | "The following code plots 5-fold cross-validated MSE as a function of\n", 848 | "$ \\alpha $ using the same training data as above" 849 | ] 850 | }, 851 | { 852 | "cell_type": "code", 853 | "execution_count": null, 854 | "metadata": { 855 | "hide-output": false 856 | }, 857 | "outputs": [], 858 | "source": [ 859 | "from sklearn.model_selection import cross_val_score\n", 860 | "mse[\"cv\"] = [-np.mean(cross_val_score(linear_model.Lasso(alpha=alpha, max_iter=50000),\n", 861 | " X_train, y_train, cv=5, scoring='neg_mean_squared_error'))\n", 862 | " for alpha in alphas]\n", 863 | "mse.plot(x=\"log_alpha\", y=\"cv\", c=colors[2], ax=ax)\n", 864 | "ax.annotate(\"cross-validation\", (mse.log_alpha[40], mse.cv[40]), color=colors[2])\n", 865 | "ax.get_legend().remove()\n", 866 | "ax.set_xlabel(r\"$-\\log(\\alpha)$\")\n", 867 | "ax.set_ylabel(\"MSE\")\n", 868 | "fig" 869 | ] 870 | }, 871 | { 872 | "cell_type": "markdown", 873 | "metadata": {}, 874 | "source": [ 875 | "scikit learn also includes methods to automate the above and select\n", 876 | "$ \\alpha $" 877 | ] 878 | }, 879 | { 880 | "cell_type": "code", 881 | "execution_count": null, 882 | "metadata": { 883 | "hide-output": false 884 | }, 885 | "outputs": [], 886 | "source": [ 887 | "# LassoCV exploits special structure of lasso problem to minimize CV more efficiently\n", 888 | "lasso = linear_model.LassoCV(cv=5).fit(X_train,y_train)\n", 889 | "-np.log10(lasso.alpha_) # should roughly = minimizer on graph, not exactly equal due to random splitting" 890 | ] 891 | }, 892 | { 893 | "cell_type": "markdown", 894 | "metadata": {}, 895 | "source": [ 896 | "### Holdout\n", 897 | "\n", 898 | "Another common technique that practitioners use to avoid overfitting is called\n", 899 | "*holdout*\n", 900 | "\n", 901 | "We demonstrated an extreme example of applying holdout above when we used only\n", 902 | "the first 50 observations to train our models\n", 903 | "\n", 904 | "In general, good practice is to split the entire dataset into a training subset\n", 905 | "and testing or validation subset\n", 906 | "\n", 907 | "The splitting should be done randomly and should leave enough data in the\n", 908 | "training dataset to produce a good model, but also enough in the validation\n", 909 | "subset to determine the degree of overfitting\n", 910 | "\n", 911 | "There aren’t hard and fast rules for how much data to put in each subset, but a\n", 912 | "reasonable default would be to use about %75 of the data for training and the\n", 913 | "rest for testing\n", 914 | "\n", 915 | "As in the example above, the training data is often further split\n", 916 | "while selecting regularization parameters with cross-validation\n", 917 | "\n", 918 | "The `sklearn` function `model_selection.train_test_split` will do this for you:" 919 | ] 920 | }, 921 | { 922 | "cell_type": "code", 923 | "execution_count": null, 924 | "metadata": { 925 | "hide-output": false 926 | }, 927 | "outputs": [], 928 | "source": [ 929 | "# note test_size=0.25 is the default value, but is shown here so you\n", 930 | "# can see how to change it\n", 931 | "X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.25)" 932 | ] 933 | }, 934 | { 935 | "cell_type": "markdown", 936 | "metadata": {}, 937 | "source": [ 938 | "
\n", 939 | "\n", 940 | "**Check for understanding**\n", 941 | "\n", 942 | "Experiment with how the size of the holdout dataset can impact a diagnosis\n", 943 | "of overfitting\n", 944 | "\n", 945 | "Evaluate only the `LinearRegression` model on the full feature set and use\n", 946 | "the `model_selection.train_test_split` function with various values for\n", 947 | "`test_size`\n", 948 | "\n", 949 | "\n", 950 | "
" 951 | ] 952 | }, 953 | { 954 | "cell_type": "markdown", 955 | "metadata": {}, 956 | "source": [ 957 | "### Lasso in Econometrics\n", 958 | "\n", 959 | "Lasso is becoming increasingly popular in economics, due in part to\n", 960 | "the work by Victor Chernozhukov and his coauthors. In econometrics, the\n", 961 | "goal is typically to estimate some coefficient of interest or causal\n", 962 | "effect, rather than obtaining the most precise prediction. Among other\n", 963 | "things, this different goal affects how the regularization parameter\n", 964 | "must be chosen. [[BC11]](#belloni2011) and [[CHS16]](#hdm) are somewhat approachable\n", 965 | "introductions to this area. The later of these two references includes an R\n", 966 | "package. [[CCD+18]](#chernozhukov2018) reflects close to the state-of-art\n", 967 | "in this rapidly advancing area." 968 | ] 969 | }, 970 | { 971 | "cell_type": "markdown", 972 | "metadata": {}, 973 | "source": [ 974 | "## Random Forests\n", 975 | "\n", 976 | "Random forests are also becoming increasingly popular in\n", 977 | "economics. This is largely due to the work by Susan Athey and her\n", 978 | "coauthors. [[AI17]](#athey2017) gives a very brief overview of some of\n", 979 | "this work, and [[AI18]](#athey2018) are video lectures and associated\n", 980 | "code aimed at a broad audience." 981 | ] 982 | }, 983 | { 984 | "cell_type": "markdown", 985 | "metadata": {}, 986 | "source": [ 987 | "### Regression Trees\n", 988 | "\n", 989 | "To understand a forest, we must first understand trees.\n", 990 | "\n", 991 | "We will begin to understand trees by looking at one.\n", 992 | "\n", 993 | "We will a fit a tree to this simulated data." 994 | ] 995 | }, 996 | { 997 | "cell_type": "code", 998 | "execution_count": null, 999 | "metadata": { 1000 | "hide-output": false 1001 | }, 1002 | "outputs": [], 1003 | "source": [ 1004 | "import numpy as np\n", 1005 | "# Simulate some data and plot it\n", 1006 | "n = 1000\n", 1007 | "Xsim = np.random.rand(n,2)\n", 1008 | "def Ey_x(x):\n", 1009 | " return 1/3*(np.sin(5*x[0])*np.sqrt(x[1])*np.exp(-(x[1]-0.5)**2))\n", 1010 | "\n", 1011 | "ysim = np.apply_along_axis(Ey_x, 1, Xsim) + np.random.randn(n)*0.1" 1012 | ] 1013 | }, 1014 | { 1015 | "cell_type": "code", 1016 | "execution_count": null, 1017 | "metadata": { 1018 | "hide-output": false 1019 | }, 1020 | "outputs": [], 1021 | "source": [ 1022 | "from plotly.offline import download_plotlyjs, init_notebook_mode\n", 1023 | "init_notebook_mode(connected=True)\n", 1024 | "import plotly.offline as py\n", 1025 | "import plotly.graph_objs as go" 1026 | ] 1027 | }, 1028 | { 1029 | "cell_type": "code", 1030 | "execution_count": null, 1031 | "metadata": { 1032 | "hide-output": false 1033 | }, 1034 | "outputs": [], 1035 | "source": [ 1036 | "def surface_scatter_plot(X,y,f, xlo=0., xhi=1., ngrid=50,\n", 1037 | " width=1000, height=800, f0=Ey_x, show_f0=False):\n", 1038 | " scatter = go.Scatter3d(x=X[:,0],y=X[:,1],z=y,\n", 1039 | " mode='markers',\n", 1040 | " marker=dict(size=2, opacity=0.3)\n", 1041 | " )\n", 1042 | " xgrid = np.linspace(xlo,xhi,ngrid)\n", 1043 | " ey = np.zeros((len(xgrid),len(xgrid)))\n", 1044 | " ey0 = np.zeros((len(xgrid),len(xgrid)))\n", 1045 | " for i in range(len(xgrid)):\n", 1046 | " for j in range(len(xgrid)):\n", 1047 | " ey[j,i] = f([xgrid[i],xgrid[j]])\n", 1048 | " ey0[j,i]= f0([xgrid[i],xgrid[j]])\n", 1049 | "\n", 1050 | " surface = go.Surface(x=xgrid, y=xgrid, z=ey, colorscale=\"YlOrRd\", opacity=1.0)\n", 1051 | " if (show_f0):\n", 1052 | " surface0 = go.Surface(x=xgrid, y=xgrid, z=ey0, opacity=0.8, colorscale=\"YlOrRd\")\n", 1053 | " layers = [scatter, surface, surface0]\n", 1054 | " else:\n", 1055 | " layers = [scatter, surface]\n", 1056 | " fig = go.Figure(data=layers,\n", 1057 | " layout = go.Layout(\n", 1058 | " autosize=True,\n", 1059 | " scene = dict(xaxis = dict(title='X1'),\n", 1060 | " yaxis = dict(title='X2'),\n", 1061 | " zaxis = dict(title='Y')),\n", 1062 | " width=width,\n", 1063 | " height=height))\n", 1064 | " return(fig)\n", 1065 | "\n", 1066 | "fig = surface_scatter_plot(Xsim,ysim,Ey_x)\n", 1067 | "py.iplot(fig)" 1068 | ] 1069 | }, 1070 | { 1071 | "cell_type": "markdown", 1072 | "metadata": {}, 1073 | "source": [ 1074 | "We now fit a regression tree to this data, and plot the predicted\n", 1075 | "regression surface." 1076 | ] 1077 | }, 1078 | { 1079 | "cell_type": "code", 1080 | "execution_count": null, 1081 | "metadata": { 1082 | "hide-output": false 1083 | }, 1084 | "outputs": [], 1085 | "source": [ 1086 | "from sklearn import tree\n", 1087 | "fitted_tree = tree.DecisionTreeRegressor(max_depth=3).fit(Xsim,ysim)\n", 1088 | "fig=surface_scatter_plot(Xsim,ysim,lambda x:\n", 1089 | " fitted_tree.predict([x]), show_f0=True)\n", 1090 | "py.iplot(fig)" 1091 | ] 1092 | }, 1093 | { 1094 | "cell_type": "markdown", 1095 | "metadata": {}, 1096 | "source": [ 1097 | "As you can see, predictions from regression trees are piecewise\n", 1098 | "constant on rectangular regions. The boundaries of these regions are\n", 1099 | "determined by a decision tree. The following code displays the\n", 1100 | "decision graph." 1101 | ] 1102 | }, 1103 | { 1104 | "cell_type": "code", 1105 | "execution_count": null, 1106 | "metadata": { 1107 | "hide-output": false 1108 | }, 1109 | "outputs": [], 1110 | "source": [ 1111 | "try:\n", 1112 | " import graphviz\n", 1113 | " tree_graph = tree.export_graphviz(fitted_tree, out_file=None,\n", 1114 | " feature_names=[\"X1\", \"X2\"],\n", 1115 | " filled=True, rounded=True,\n", 1116 | " special_characters=True)\n", 1117 | " display(graphviz.Source(tree_graph))\n", 1118 | "except:\n", 1119 | " print(\"graphviz not installed, cannot display tree\")" 1120 | ] 1121 | }, 1122 | { 1123 | "cell_type": "markdown", 1124 | "metadata": {}, 1125 | "source": [ 1126 | "Regression trees are formed iteratively.\n", 1127 | "\n", 1128 | "We begin with a rectangular region $ R $ containing all values of\n", 1129 | "the X. We then choose a feature to split on and where to split. The\n", 1130 | "splitting feature and location are chosen to minimize MSE. We then\n", 1131 | "repeat to generate all the branches.\n", 1132 | "\n", 1133 | "- For each region, solve \n", 1134 | "\n", 1135 | "\n", 1136 | "$$\n", 1137 | "\\min_{j,s} \\left[ \\min_{c_1} \\sum_{i: x_{i,j} \\leq s, x_i \\in R}\n", 1138 | " (y_i - c_1)^2 + \\min_{c_2} \\sum_{i: x_{i,j} > s, x_i \\in R}\n", 1139 | " (y_i - c_2)^2 \\right]\n", 1140 | "$$\n", 1141 | "\n", 1142 | "- Repeat with each of the two smaller rectangles \n", 1143 | "- Stop when $ |R| = $ some chosen minimum size or when depth of tree $ = $\n", 1144 | " some chosen maximum \n", 1145 | "- Prune tree \n", 1146 | "\n", 1147 | "\n", 1148 | "$$\n", 1149 | "\\min_{tree \\subset T} \\sum (\\hat{f}(x)-y)^2 + \\alpha|\\text{terminal\n", 1150 | " nodes in tree}|\n", 1151 | "$$\n", 1152 | "\n", 1153 | "There are many variations on this tree building algorithm. They all\n", 1154 | "share some rule to decide on which variable and where to split. They\n", 1155 | "all have some kind of stopping rule, but not necessarily the same\n", 1156 | "one. For example, some algorithms stop splitting into new branches\n", 1157 | "when the improvement in MSE becomes small.\n", 1158 | "\n", 1159 | "As with lasso, regression trees involve some regularization. In the\n", 1160 | "above description, the minimum leaf size, maximum tree depth, and\n", 1161 | "$ \\alpha $ in the pruning step serve as regularization\n", 1162 | "parameters.\n", 1163 | "\n", 1164 | "
\n", 1165 | "\n", 1166 | "**Check for understanding**\n", 1167 | "\n", 1168 | "Read the documentation for sklearn.tree.DecisionTreeRegressor, and\n", 1169 | "then experiment to see how adjusting some of the regularization parameters\n", 1170 | "affect the fitted tree.\n", 1171 | "\n", 1172 | "\n", 1173 | "
" 1174 | ] 1175 | }, 1176 | { 1177 | "cell_type": "code", 1178 | "execution_count": null, 1179 | "metadata": { 1180 | "hide-output": false 1181 | }, 1182 | "outputs": [], 1183 | "source": [ 1184 | "# plot trees when varying some regularization parameter(s)" 1185 | ] 1186 | }, 1187 | { 1188 | "cell_type": "markdown", 1189 | "metadata": {}, 1190 | "source": [ 1191 | "
\n", 1192 | "\n", 1193 | "**Check for understanding**\n", 1194 | "\n", 1195 | "Fit a regression tree to the housing price data and use graphviz\n", 1196 | "to visualize the decision graph.\n", 1197 | "\n", 1198 | "\n", 1199 | "
" 1200 | ] 1201 | }, 1202 | { 1203 | "cell_type": "code", 1204 | "execution_count": null, 1205 | "metadata": { 1206 | "hide-output": false 1207 | }, 1208 | "outputs": [], 1209 | "source": [] 1210 | }, 1211 | { 1212 | "cell_type": "markdown", 1213 | "metadata": {}, 1214 | "source": [ 1215 | "An advantage of regression trees (and random forests) is that they\n", 1216 | "adapt automatically to feature scales and units. Last class, a student\n", 1217 | "pointed out that it was strange to include the numeric zipcode as a\n", 1218 | "variable in the linear regression and lasso. It would have made more\n", 1219 | "sense to include indicator or dummy variables for each\n", 1220 | "zipcode. Regression trees do not impose linearity or even\n", 1221 | "monotonicity, so it less harmful to have the numeric zipcode as a\n", 1222 | "feature." 1223 | ] 1224 | }, 1225 | { 1226 | "cell_type": "code", 1227 | "execution_count": null, 1228 | "metadata": { 1229 | "hide-output": false 1230 | }, 1231 | "outputs": [], 1232 | "source": [ 1233 | "ax = var_scatter(df, var=\"zipcode\")\n", 1234 | "zip_tree = tree.DecisionTreeRegressor(max_depth=10).fit(X[[\"zipcode\"]],y)\n", 1235 | "scatter_model(zip_tree, X[[\"zipcode\"]], ax, x=\"zipcode\")" 1236 | ] 1237 | }, 1238 | { 1239 | "cell_type": "markdown", 1240 | "metadata": {}, 1241 | "source": [ 1242 | "### Random Forests\n", 1243 | "\n", 1244 | "A random forests is the average of many randomized regression trees\n", 1245 | "\n", 1246 | "Trees randomized by\n", 1247 | "- Fitting on randomly resampled subsets of data\n", 1248 | "- Randomize features chosen for branching:\n", 1249 | "\n", 1250 | "$$\n", 1251 | "\\min_{j \\in S,s} \\left[ \\min_{c_1} \\sum_{i: x_{i,j} \\leq s, x_i \\in R}\n", 1252 | " (y_i - c_1)^2 + \\min_{c_2} \\sum_{i: x_{i,j} > s, x_i \\in R}\n", 1253 | " (y_i - c_2)^2 \\right]\n", 1254 | "$$\n", 1255 | "\n", 1256 | "where $ S $ is a random subset of features\n", 1257 | "\n", 1258 | "Randomizing and averaging smooths out the predictions from individual\n", 1259 | "trees. This improves predictions and reduces the variance of the\n", 1260 | "predictions." 1261 | ] 1262 | }, 1263 | { 1264 | "cell_type": "code", 1265 | "execution_count": null, 1266 | "metadata": { 1267 | "hide-output": false 1268 | }, 1269 | "outputs": [], 1270 | "source": [ 1271 | "# example of forest for simulated data\n", 1272 | "\n", 1273 | "from sklearn.ensemble import RandomForestRegressor\n", 1274 | "forest = RandomForestRegressor(n_estimators = 10).fit(Xsim,ysim)\n", 1275 | "fig=surface_scatter_plot(Xsim,ysim,lambda x: forest.predict([x]),\n", 1276 | " show_f0=True)\n", 1277 | "py.iplot(fig)" 1278 | ] 1279 | }, 1280 | { 1281 | "cell_type": "markdown", 1282 | "metadata": {}, 1283 | "source": [ 1284 | "Random forests generally produce more accurate predictions than any\n", 1285 | "single tree. However, random forests have at least two downsides\n", 1286 | "compared to trees. Random forests take longer to compute, and random\n", 1287 | "forests can be more difficult to interpret. We can no longer draw a\n", 1288 | "single decision graph. Instead, people often report “feature\n", 1289 | "importance” for random forests. Feature importance is the average\n", 1290 | "across trees of how much the splits on each feature decreased\n", 1291 | "MSE. Greater importance of a given feature means that the trees split\n", 1292 | "on that feature more often and/or splitting on that feature resulted\n", 1293 | "in larger decreases in MSE." 1294 | ] 1295 | }, 1296 | { 1297 | "cell_type": "code", 1298 | "execution_count": null, 1299 | "metadata": { 1300 | "hide-output": false 1301 | }, 1302 | "outputs": [], 1303 | "source": [ 1304 | "forest.feature_importances_" 1305 | ] 1306 | }, 1307 | { 1308 | "cell_type": "markdown", 1309 | "metadata": {}, 1310 | "source": [ 1311 | "
\n", 1312 | "\n", 1313 | "**Check for understanding**\n", 1314 | "\n", 1315 | "Fit a random forest to the housing price data. Compare the MSE on\n", 1316 | "a testing set to that of Lasso.\n", 1317 | "\n", 1318 | "\n", 1319 | "
" 1320 | ] 1321 | }, 1322 | { 1323 | "cell_type": "code", 1324 | "execution_count": null, 1325 | "metadata": { 1326 | "hide-output": false 1327 | }, 1328 | "outputs": [], 1329 | "source": [ 1330 | "# Fit random forest and compute MSE" 1331 | ] 1332 | }, 1333 | { 1334 | "cell_type": "markdown", 1335 | "metadata": {}, 1336 | "source": [ 1337 | "
\n", 1338 | "Produce a bar chart of feature importances for predicting house\n", 1339 | "prices.\n", 1340 | "\n", 1341 | "\n", 1342 | "
" 1343 | ] 1344 | }, 1345 | { 1346 | "cell_type": "code", 1347 | "execution_count": null, 1348 | "metadata": { 1349 | "hide-output": false 1350 | }, 1351 | "outputs": [], 1352 | "source": [] 1353 | }, 1354 | { 1355 | "cell_type": "markdown", 1356 | "metadata": {}, 1357 | "source": [ 1358 | "
\n", 1359 | "\n", 1360 | "
" 1361 | ] 1362 | }, 1363 | { 1364 | "cell_type": "markdown", 1365 | "metadata": {}, 1366 | "source": [ 1367 | "## Neural Networks\n", 1368 | "\n", 1369 | "The final regression algorithm we will talk about in this lecture is a type of\n", 1370 | "neural network.\n", 1371 | "\n", 1372 | "Based on your interest in this course, our strong prior is that you have\n", 1373 | "probably heard about neural networks in the news or social media.\n", 1374 | "\n", 1375 | "The purpose of this section is not to give an exhaustive overview of the topic,\n", 1376 | "but instead to introduce you to a particular neural network model and present\n", 1377 | "it from a different perspective that hopefully complement materials you may run\n", 1378 | "into elsewhere." 1379 | ] 1380 | }, 1381 | { 1382 | "cell_type": "markdown", 1383 | "metadata": {}, 1384 | "source": [ 1385 | "### Mathematical Background\n", 1386 | "\n", 1387 | "If linear regression is the [“Hello World”](https://en.wikipedia.org/wiki/%22Hello,_World!%22_program) of regression\n", 1388 | "algorithms, then the multi-layer perceptron (MLP) is the hello world of neural\n", 1389 | "networks.\n", 1390 | "\n", 1391 | "We’ll start with a single (hidden) layer MLP and then build up to the general form.\n", 1392 | "\n", 1393 | "The prediction function for a single layer MLP is\n", 1394 | "\n", 1395 | "$$\n", 1396 | "y = f_1(X w_1 + b_1) w_2 + b_2\n", 1397 | "$$\n", 1398 | "\n", 1399 | "In words what we have here is *nested linear regression* (the $ (\\cdot) w_i + b_i $\n", 1400 | "parts), separated by an *activation function* (the $ f_1 $).\n", 1401 | "\n", 1402 | "Let’s unpack what happens, starting from our $ N_\\text{samples} \\times\n", 1403 | "N_\\text{features} $ feature matrix $ X $.\n", 1404 | "\n", 1405 | "1. First, $ X $ is multiplied by a coefficient matrix $ w_1 $. $ w_1 $ is often called the *weight matrix* or *weights* for short and has dimension $ N_{\\text{features}} \\times N_1 $ \n", 1406 | "1. The vector $ b_1 $ is added to each row. $ b_1 $ is often called the *bias vector* or *bias* for short and has dimension $ N_1 \\times 1 $ \n", 1407 | "1. The function $ f_1 $ is then applied. Typically $ f_1 $ a non-linear function that is applied separately to each element. $ f_1 $ is called the *activation function* \n", 1408 | "1. The output is then multiplied by a weight matrix $ w_2 $ with dimension $ N_1 \\times 1 $ \n", 1409 | "1. Finally a scalar $ b_2 $ is added to each row to generate the final prediction with dimension $ N_{\\text{samples}} \\times 1 $ \n", 1410 | "\n", 1411 | "\n", 1412 | "The way we might write this in python is:" 1413 | ] 1414 | }, 1415 | { 1416 | "cell_type": "markdown", 1417 | "metadata": { 1418 | "hide-output": false 1419 | }, 1420 | "source": [ 1421 | "```python\n", 1422 | "y = f(X@w1 + b1)@w2 + b2\n", 1423 | "```\n" 1424 | ] 1425 | }, 1426 | { 1427 | "cell_type": "markdown", 1428 | "metadata": {}, 1429 | "source": [ 1430 | "In order to build an \\$N\\$-hidden layer MLP we will *nest* additional linear regressions separated by activation functions.\n", 1431 | "\n", 1432 | "The equation for this case is difficult to express, but has the following form\n", 1433 | "\n", 1434 | "$$\n", 1435 | "y = f_{\\cdots} \\left(f_2(f_1(X w_1 + b_1) w_2 + b_2) w_{\\cdots} + b_{\\cdots} \\right) w_{N+1} + b_{N+1}\n", 1436 | "$$\n", 1437 | "\n", 1438 | "where the $ \\cdots $ represents layers 3 to $ N $.\n", 1439 | "\n", 1440 | "Notice the pattern of a linear regression ($ (\\cdot) w + b $),\n", 1441 | "followed by applying an activation function ($ f $) at each step.\n", 1442 | "\n", 1443 | "
\n", 1444 | "\n", 1445 | "**Check for understanding**\n", 1446 | "\n", 1447 | "Fill in the blanks in the pseudo code below for the generic MLP\n", 1448 | "\n", 1449 | "Note that this is inside a markdown cell because the code is not valid\n", 1450 | "python\n", 1451 | "\n", 1452 | "\n", 1453 | "\n", 1454 | "```python\n", 1455 | "ws = [w1, w2, ..., wend]\n", 1456 | "bs = [b1, b2, ..., bend]\n", 1457 | "\n", 1458 | "def eval_mlp(X, ws, bs, f):\n", 1459 | " \"\"\"\n", 1460 | " evaluate MLP given weights (ws), bias (bs) and an activation (f)\n", 1461 | "\n", 1462 | " Assumes that the same activation is applied to all hidden layers\n", 1463 | " \"\"\"\n", 1464 | " N = len(ws) - 1\n", 1465 | "\n", 1466 | " out = X\n", 1467 | " for i in range(N):\n", 1468 | " out = f(__) # replace the __\n", 1469 | "\n", 1470 | " # For this step remember python starts counting at 0!\n", 1471 | " return out@__ + __ # replace the __\n", 1472 | "```\n", 1473 | "\n", 1474 | "
" 1475 | ] 1476 | }, 1477 | { 1478 | "cell_type": "markdown", 1479 | "metadata": {}, 1480 | "source": [ 1481 | "The loss or error function typically used when using an MLP for regression is\n", 1482 | "our now familiar mean squared error loss function:\n", 1483 | "\n", 1484 | "$$\n", 1485 | "{||y - \\hat{y}||_2}^2\n", 1486 | "$$\n", 1487 | "\n", 1488 | "where $ \\hat{y} $ is the output of the neural network.\n", 1489 | "\n", 1490 | "Here we fit a neural network to the same simulated data that we used\n", 1491 | "in the random forests section." 1492 | ] 1493 | }, 1494 | { 1495 | "cell_type": "code", 1496 | "execution_count": null, 1497 | "metadata": { 1498 | "hide-output": false 1499 | }, 1500 | "outputs": [], 1501 | "source": [ 1502 | "from sklearn import neural_network\n", 1503 | "nn = neural_network.MLPRegressor((6,), activation=\"logistic\",\n", 1504 | " verbose=True, solver=\"lbfgs\",\n", 1505 | " alpha=0.0).fit(Xsim,ysim)\n", 1506 | "fig=surface_scatter_plot(Xsim,ysim,lambda x: nn.predict([x]), show_f0=True)\n", 1507 | "py.iplot(fig)" 1508 | ] 1509 | }, 1510 | { 1511 | "cell_type": "markdown", 1512 | "metadata": {}, 1513 | "source": [ 1514 | "We are nearly ready to test out a MLP on our housing data, but there are a few\n", 1515 | "more talking points to cover:\n", 1516 | "\n", 1517 | "- [[HSW89]](#hornik1989) show that MLPs are universal approximators,\n", 1518 | " meaning they are theoretically capable of approximating any\n", 1519 | " function. This fact is sometimes stated as though it helps explain\n", 1520 | " the exceptionally good predictive ability of neural networks. Do not\n", 1521 | " be fooled by this fallacy. Many other methods are universal approximators,\n", 1522 | " including regression trees and more classic statistical methods like\n", 1523 | " serires regression and kernel regression. The explanation for neural\n", 1524 | " networks’ predictive success lies elsewhere. [1](#rate) \n", 1525 | "- It is crucial that the activation functions are non-linear. If they were not\n", 1526 | " the MLP would be combining linear combinations of linear combinations and\n", 1527 | " would always be linear. \n", 1528 | "- The hidden layer structure of a MLP allows it to do automatic feature engineering.\n", 1529 | " This is in contrast to the example we had above where we manually engineered\n", 1530 | " the square feet above ground feature. \n", 1531 | "\n", 1532 | "\n", 1533 | "\n", 1534 | "**[1]** Two facts about neural networks that are relevant to their\n", 1535 | "predictive success: automatic feature engineering, as\n", 1536 | "mentioned above, and the ability of neural networks to\n", 1537 | "approximate a broad, but not quite universal, class of\n", 1538 | "functions with relatively few parameters. This allows\n", 1539 | "neural networks to have a fast statistical convergence\n", 1540 | "rate. Under appropriate assumptions, lasso, series\n", 1541 | "regression, and kernel regression share this fast\n", 1542 | "convergence rate property, but they lack automatic feature\n", 1543 | "engineering. Random forests have automatic feature\n", 1544 | "engineering, but do not have a fast convergence rate.\n", 1545 | "Neural networks are somewhat unique in combining both\n", 1546 | "properties.\n", 1547 | "See\n", 1548 | "[these notes and references therein](http://faculty.arts.ubc.ca/pschrimpf/628/machineLearningAndCausalInference.html#2_introduction_to_machine_learning)\n", 1549 | "for more information about convergence rates." 1550 | ] 1551 | }, 1552 | { 1553 | "cell_type": "markdown", 1554 | "metadata": {}, 1555 | "source": [ 1556 | "### Application\n", 1557 | "\n", 1558 | "Ok, now let’s try out our first neural network!" 1559 | ] 1560 | }, 1561 | { 1562 | "cell_type": "code", 1563 | "execution_count": null, 1564 | "metadata": { 1565 | "hide-output": false 1566 | }, 1567 | "outputs": [], 1568 | "source": [ 1569 | "from sklearn import neural_network\n", 1570 | "\n", 1571 | "X = df.drop([\"price\", \"date\", \"id\", \"log_price\"], axis=1).copy()\n", 1572 | "for col in list(X):\n", 1573 | " X[col] = X[col].astype(float)\n", 1574 | "y = np.log(df[\"price\"])\n", 1575 | "\n", 1576 | "# two hidden layers, with N1=30 and N2=20\n", 1577 | "nn_model = neural_network.MLPRegressor((30, 20))\n", 1578 | "nn_model.fit(X, y)\n", 1579 | "\n", 1580 | "ax = var_scatter(df)\n", 1581 | "scatter_model(nn_model, X, ax=ax)" 1582 | ] 1583 | }, 1584 | { 1585 | "cell_type": "markdown", 1586 | "metadata": {}, 1587 | "source": [ 1588 | "Wow! That plot looks horrible, let’s check the MSE" 1589 | ] 1590 | }, 1591 | { 1592 | "cell_type": "code", 1593 | "execution_count": null, 1594 | "metadata": { 1595 | "hide-output": false 1596 | }, 1597 | "outputs": [], 1598 | "source": [ 1599 | "mse_nn = metrics.mean_squared_error(y, nn_model.predict(X))\n", 1600 | "mse_nn / metrics.mean_squared_error(y, lr_model.predict(X))" 1601 | ] 1602 | }, 1603 | { 1604 | "cell_type": "markdown", 1605 | "metadata": {}, 1606 | "source": [ 1607 | "So… after all that talk about neural networks begin able to do anything, we\n", 1608 | "get a mean squared error that is tens of thousands of times larger than the\n", 1609 | "MSE from a linear regression!" 1610 | ] 1611 | }, 1612 | { 1613 | "cell_type": "markdown", 1614 | "metadata": {}, 1615 | "source": [ 1616 | "### Input scaling\n", 1617 | "\n", 1618 | "The issue here is that neural networks are extremely sensitive to the scale\n", 1619 | "(both relative and absolute) of the input features.\n", 1620 | "\n", 1621 | "The reasons for why are a bit beyond the scope of this lecture, but the main\n", 1622 | "idea is the training procedure will pay too much attention to relatively larger\n", 1623 | "features (relative scale) and become unstable if features are very large\n", 1624 | "(absolute scale).\n", 1625 | "\n", 1626 | "A common technique to overcome this issue is to scale each variable so that the\n", 1627 | "observations have mean 0 and standard deviation 1.\n", 1628 | "\n", 1629 | "This is known as scaling or normalizing the inputs.\n", 1630 | "\n", 1631 | "
\n", 1632 | "\n", 1633 | "**Check for understanding**\n", 1634 | "\n", 1635 | "Scale all variables in `X` by subtracting their mean and dividing by the\n", 1636 | "standard deviation.\n", 1637 | "\n", 1638 | "Verify that the transformed data has mean 0 and standard deviation 1.\n", 1639 | "\n", 1640 | "\n", 1641 | "
" 1642 | ] 1643 | }, 1644 | { 1645 | "cell_type": "code", 1646 | "execution_count": null, 1647 | "metadata": { 1648 | "hide-output": false 1649 | }, 1650 | "outputs": [], 1651 | "source": [ 1652 | "# your code here" 1653 | ] 1654 | }, 1655 | { 1656 | "cell_type": "markdown", 1657 | "metadata": {}, 1658 | "source": [ 1659 | "
\n", 1660 | "\n", 1661 | "
" 1662 | ] 1663 | }, 1664 | { 1665 | "cell_type": "markdown", 1666 | "metadata": {}, 1667 | "source": [ 1668 | "If we do decide to scale our variables, we must remember to apply the same\n", 1669 | "transformation at prediction time that we applied when we fit the model.\n", 1670 | "\n", 1671 | "In practice this means that we must do three things:\n", 1672 | "\n", 1673 | "1. Store the mean and standard deviation of each feature in the training set \n", 1674 | "1. Subtract each feature’s mean from the training data and then divide by the feature’s standard deviation before fitting \n", 1675 | "1. Subtract the *training data’s* mean and divide by *training data’s* standard deviation for all prediction inputs \n", 1676 | "\n", 1677 | "\n", 1678 | "This is a tedious and somewhat error-prone process as it is easy to forget to\n", 1679 | "apply the transformation to the prediction data.\n", 1680 | "\n", 1681 | "Thankfully scikit-learn has a way to automate the process and ensure that it is\n", 1682 | "always applied.\n", 1683 | "\n", 1684 | "Let’s see an example:" 1685 | ] 1686 | }, 1687 | { 1688 | "cell_type": "code", 1689 | "execution_count": null, 1690 | "metadata": { 1691 | "hide-output": false 1692 | }, 1693 | "outputs": [], 1694 | "source": [ 1695 | "from sklearn import preprocessing, pipeline\n", 1696 | "\n", 1697 | "# the pipeline defines any number of steps that will be applied\n", 1698 | "# to transform the `X` data and then a final step that is a model\n", 1699 | "# we can use for prediction\n", 1700 | "nn_scaled_model = pipeline.make_pipeline(\n", 1701 | " preprocessing.StandardScaler(), # this will do the input scaling\n", 1702 | " neural_network.MLPRegressor((30, 20)) # put your favorite model here\n", 1703 | ")\n", 1704 | "\n", 1705 | "# we can now use `model` like we have used our other models all along\n", 1706 | "# call fit\n", 1707 | "nn_scaled_model.fit(X, y)\n", 1708 | "\n", 1709 | "# call predict\n", 1710 | "mse_nn_scaled = metrics.mean_squared_error(y, nn_scaled_model.predict(X))\n", 1711 | "\n", 1712 | "print(f\"Unscaled mse {mse_nn}\")\n", 1713 | "print(f\"Scaled mse {mse_nn_scaled}\")" 1714 | ] 1715 | }, 1716 | { 1717 | "cell_type": "markdown", 1718 | "metadata": {}, 1719 | "source": [ 1720 | "There we have it, much better. This is the smallest MSE we have seen so far.\n", 1721 | "\n", 1722 | "A scatter plot of the predictions looks very similar to the observed prices." 1723 | ] 1724 | }, 1725 | { 1726 | "cell_type": "code", 1727 | "execution_count": null, 1728 | "metadata": { 1729 | "hide-output": false 1730 | }, 1731 | "outputs": [], 1732 | "source": [ 1733 | "ax = var_scatter(df)\n", 1734 | "scatter_model(nn_scaled_model, X, ax=ax)" 1735 | ] 1736 | }, 1737 | { 1738 | "cell_type": "markdown", 1739 | "metadata": {}, 1740 | "source": [ 1741 | "### Tradeoffs\n", 1742 | "\n", 1743 | "So we’ve seen that neural networks are very flexible and can approximate highly\n", 1744 | "nonlinear functions\n", 1745 | "\n", 1746 | "However, there are tradeoffs to using them\n", 1747 | "\n", 1748 | "We’ll discuss a few of them here\n", 1749 | "\n", 1750 | "- **Interpretability**: unlike linear regression or lasso, neural\n", 1751 | " networks are not easily interpretable. We could look at the $ w $\n", 1752 | " matrices or $ b $ vectors, but due to the nested composition and\n", 1753 | " nonlinear activation functions it is very difficult to interpret\n", 1754 | " just how each coefficient impacts the output. In settings like\n", 1755 | " making economic policy recommendations or suggestion decisions with\n", 1756 | " potentially ethical consequences (e.g. approving loans, screening)\n", 1757 | " the lack of interpretability can be a non-starter. \n", 1758 | "- **Efficiency/time**: Neural networks require more computational\n", 1759 | " power to evaluate (generate predictions) and are orders of magnitude\n", 1760 | " more expensive to train than classical machine learning\n", 1761 | " methods. \n", 1762 | "- **Automated feature engineering**: the nested linear regressions\n", 1763 | " allows neural networks to learn features of the data that are\n", 1764 | " composed of arbitrary linear combinations of the original feature\n", 1765 | " set. The non-linear activation functions allow the network to learn\n", 1766 | " arbitrary non-linear features. Manual feature engineering is based\n", 1767 | " largely on the researchers intuition and a fair amount of trial and\n", 1768 | " error. Coming up with the right features that allow for more\n", 1769 | " explanatory power without overfitting is very difficult. Neural\n", 1770 | " networks automate that process by having the data itself guide the\n", 1771 | " training process to select features that satisfy accuracy and\n", 1772 | " regularization conditions. \n", 1773 | "- **Overfitting**: because of their great flexibly and explanatory\n", 1774 | " power it is very easy to overfit when using neural networks. There\n", 1775 | " are various approaches to regularization when training neural\n", 1776 | " networks, and these should be studied and evaluated when building\n", 1777 | " networks that will be used for decision making purposes. \n", 1778 | "\n", 1779 | "\n", 1780 | "
\n", 1781 | "\n", 1782 | "**Check for understanding**\n", 1783 | "\n", 1784 | "As we did with regression trees above, explore the ability of\n", 1785 | "neural networks to automate feature engineering by using numeric\n", 1786 | "zipcode to predict house prices. Experiment with how adjusting the\n", 1787 | "regularization parameters affects the predictions.\n", 1788 | "\n", 1789 | "\n", 1790 | "
" 1791 | ] 1792 | }, 1793 | { 1794 | "cell_type": "code", 1795 | "execution_count": null, 1796 | "metadata": { 1797 | "hide-output": false 1798 | }, 1799 | "outputs": [], 1800 | "source": [] 1801 | }, 1802 | { 1803 | "cell_type": "markdown", 1804 | "metadata": {}, 1805 | "source": [ 1806 | "
\n", 1807 | "\n", 1808 | "**Exercise**\n", 1809 | "\n", 1810 | "> \n", 1811 | "
\n", 1812 | "
class
\n", 1813 | "
\n", 1814 | "cfu\n", 1815 | "\n", 1816 | "
\n", 1817 | "\n", 1818 | "
\n", 1819 | "\n", 1820 | "\n", 1821 | "Read the documentation for sklearn.neural_network.MLPRegressor, and\n", 1822 | "experiment with how adjusting layer depth, width, and other\n", 1823 | "regularization parameters affects prediction using the full housing\n", 1824 | "data.\n", 1825 | "\n", 1826 | "\n", 1827 | "
" 1828 | ] 1829 | }, 1830 | { 1831 | "cell_type": "code", 1832 | "execution_count": null, 1833 | "metadata": { 1834 | "hide-output": false 1835 | }, 1836 | "outputs": [], 1837 | "source": [] 1838 | }, 1839 | { 1840 | "cell_type": "markdown", 1841 | "metadata": {}, 1842 | "source": [ 1843 | "## References\n", 1844 | "\n", 1845 | "Two good text books covering the above regression methods are\n", 1846 | "[[FHT09]](#friedman2008) and [[EH16]](#efron2016) .\n", 1847 | "\n", 1848 | "\n", 1849 | "\\[AI18\\] Susan Athey and Guido Imbens. Machine learning and econometrics. 2018. URL: [https://www.aeaweb.org/conference/cont-ed/2018-webcasts](https://www.aeaweb.org/conference/cont-ed/2018-webcasts).\n", 1850 | "\n", 1851 | "\n", 1852 | "\\[AI17\\] Susan Athey and Guido W. Imbens. The state of applied econometrics: causality and policy evaluation. *Journal of Economic Perspectives*, 31(2):3–32, May 2017. URL: [http://www.aeaweb.org/articles?id=10.1257/jep.31.2.3](http://www.aeaweb.org/articles?id=10.1257/jep.31.2.3), [doi:10.1257/jep.31.2.3](https://doi.org/10.1257/jep.31.2.3).\n", 1853 | "\n", 1854 | "\n", 1855 | "\\[BC11\\] Alexandre Belloni and Victor Chernozhukov. *High Dimensional Sparse Econometric Models: An Introduction*, pages 121–156. Springer Berlin Heidelberg, Berlin, Heidelberg, 2011. URL: [https://doi.org/10.1007/978-3-642-19989-9_3](https://doi.org/10.1007/978-3-642-19989-9_3), [doi:10.1007/978-3-642-19989-9_3](https://doi.org/10.1007/978-3-642-19989-9_3).\n", 1856 | "\n", 1857 | "\n", 1858 | "\\[CCD+18\\] Victor Chernozhukov, Denis Chetverikov, Mert Demirer, Esther Duflo, Christian Hansen, Whitney Newey, and James Robins. Double/debiased machine learning for treatment and structural parameters. *The Econometrics Journal*, 21(1):C1–C68, 2018. URL: [https://onlinelibrary.wiley.com/doi/abs/10.1111/ectj.12097](https://onlinelibrary.wiley.com/doi/abs/10.1111/ectj.12097), [arXiv:https://onlinelibrary.wiley.com/doi/pdf/10.1111/ectj.12097](https://arxiv.org/abs/https://onlinelibrary.wiley.com/doi/pdf/10.1111/ectj.12097), [doi:10.1111/ectj.12097](https://doi.org/10.1111/ectj.12097).\n", 1859 | "\n", 1860 | "\n", 1861 | "\\[CHS16\\] Victor Chernozhukov, Chris Hansen, and Martin Spindler. hdm: high-dimensional metrics. *R Journal*, 8(2):185–199, 2016. URL: [https://journal.r-project.org/archive/2016/RJ-2016-040/index.html](https://journal.r-project.org/archive/2016/RJ-2016-040/index.html).\n", 1862 | "\n", 1863 | "\n", 1864 | "\\[EH16\\] Bradley Efron and Trevor Hastie. *Computer age statistical inference*. Volume 5. Cambridge University Press, 2016. URL: [https://web.stanford.edu/~hastie/CASI/](https://web.stanford.edu/~hastie/CASI/).\n", 1865 | "\n", 1866 | "\n", 1867 | "\\[FHT09\\] Jerome Friedman, Trevor Hastie, and Robert Tibshirani. *The elements of statistical learning*. Springer series in statistics, 2009. URL: [https://web.stanford.edu/~hastie/ElemStatLearn/](https://web.stanford.edu/~hastie/ElemStatLearn/).\n", 1868 | "\n", 1869 | "\n", 1870 | "\\[HSW89\\] Kurt Hornik, Maxwell Stinchcombe, and Halbert White. Multilayer feedforward networks are universal approximators. *Neural Networks*, 2(5):359 – 366, 1989. URL: [http://www.sciencedirect.com/science/article/pii/0893608089900208](http://www.sciencedirect.com/science/article/pii/0893608089900208), [doi:https://doi.org/10.1016/0893-6080(89)90020-8](https://doi.org/https://doi.org/10.1016/0893-6080%2889%2990020-8)." 1871 | ] 1872 | } 1873 | ], 1874 | "metadata": { 1875 | "@webio": { 1876 | "lastCommId": "de4d6dae01964dbc9f3270a6fbc8ee10", 1877 | "lastKernelId": "ff1c38e1-f11b-4e46-877a-2b28c7a83857" 1878 | }, 1879 | "filename": "regression.rst", 1880 | "kernelspec": { 1881 | "display_name": "Python 3", 1882 | "language": "python", 1883 | "name": "python3" 1884 | }, 1885 | "language_info": { 1886 | "codemirror_mode": { 1887 | "name": "ipython", 1888 | "version": 3 1889 | }, 1890 | "file_extension": ".py", 1891 | "mimetype": "text/x-python", 1892 | "name": "python", 1893 | "nbconvert_exporter": "python", 1894 | "pygments_lexer": "ipython3", 1895 | "version": "3.7.2" 1896 | }, 1897 | "title": "Regression" 1898 | }, 1899 | "nbformat": 4, 1900 | "nbformat_minor": 2 1901 | } 1902 | -------------------------------------------------------------------------------- /applications/visualization_rules.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:eebe744b913aea23baa6255c77ef4010e7182d0a9d42a368a18f53c7467e9fcf 3 | size 70173 4 | -------------------------------------------------------------------------------- /index.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:f6c2ec0cd09265dceae25ba113858a14f653ed99978e4a03c401db2f7e083856 3 | size 1689 4 | -------------------------------------------------------------------------------- /overview.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c981fc2eb007ad3f876bbe7a1a4c4e80789a2017fe877d3019da961e391daa48 3 | size 6094 4 | -------------------------------------------------------------------------------- /pandas/basics.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:0044223c9b804236b9de73b05e9a306eb75fbdf42ca606254841edccfc0e59ee 3 | size 163534 4 | -------------------------------------------------------------------------------- /pandas/data_clean.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b4d9ea7656a9ce0defd9ae8bcc17b35c5c6a961ef7b02d565e8e4a1b5348a1da 3 | size 55202 4 | -------------------------------------------------------------------------------- /pandas/groupby.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9d93f0266921303f331aab189f342e52ba32351d59e12fe29061a5975cba7dcf 3 | size 466088 4 | -------------------------------------------------------------------------------- /pandas/index.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:251e8c73fec1b1c834c7e05de3cdd6e2dfbcca86fae7301eb804af1a309be8f8 3 | size 6205 4 | -------------------------------------------------------------------------------- /pandas/intro.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:16ada2704510dd6fc95ffe204cf045d6d8863f9c2a0dcfa3f7cd772a59f96c93 3 | size 119185 4 | -------------------------------------------------------------------------------- /pandas/matplotlib.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:15837b5ef5814fe29c51d3727a433005309d09b91bdae3a2a50ddae7a2f124c5 3 | size 841086 4 | -------------------------------------------------------------------------------- /pandas/merge.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:0d98bb612d2bb6a5013e1646b7582591fb5e3a46cb7537b7a019f56907dc1a88 3 | size 162761 4 | -------------------------------------------------------------------------------- /pandas/reshape.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:501390da4ed83a2ab5a29d8929563a14ee535c755d5ec1f3f039d5265e761b8c 3 | size 84307 4 | -------------------------------------------------------------------------------- /pandas/storage_formats.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:bc8b8d14e48427392ec79c56229e09a28566bfeabb5efd9703451937c5a36e05 3 | size 20091 4 | -------------------------------------------------------------------------------- /pandas/the_index.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:0d2bb1301adcf799064fb1f5b3548f76f7125f11fae5ae8ab2e047b0cd25450c 3 | size 52255 4 | -------------------------------------------------------------------------------- /pandas/timeseries.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4fdc340fd4c4c4889e0a48b6321f5f701a6645c68df6771758563cbf367fbb2b 3 | size 204998 4 | -------------------------------------------------------------------------------- /problem_sets/ahs-doc.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuantEcon/quantecon-notebooks-datascience-old/b6c31ba13a0280262218606c0ebec75ba86c4ee6/problem_sets/ahs-doc.csv -------------------------------------------------------------------------------- /problem_sets/problem_set_1.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:77a6e17d87679b5d3fc31b5c236ed73c3f880ade5b27fad31eaf0a36e85087ff 3 | size 6212 4 | -------------------------------------------------------------------------------- /problem_sets/problem_set_2.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:aab8aa7145b766bb71c795ee70d8a8eb5575e6cdc8e3c4b131fe462dd3ed0a3d 3 | size 10504 4 | -------------------------------------------------------------------------------- /problem_sets/problem_set_3.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:712eb3cea7cdd216f929e089bf9d414401faf1a23bd0e565503d9b56f18dfe05 3 | size 11999 4 | -------------------------------------------------------------------------------- /problem_sets/problem_set_4.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:3e95fd23e7ef54f2a822bc262d5c049b6c0d9b3b21a3622eebfc8a56e6223e30 3 | size 11205 4 | -------------------------------------------------------------------------------- /problem_sets/problem_set_5.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c548977039467a98487c9172fb2616b85ac16220540a79c29da335fa2eee0937 3 | size 11207 4 | -------------------------------------------------------------------------------- /problem_sets/problem_set_6.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:bcf63b8a7379f236d33b96aa34fe1a739ce0216f7fc733a3a8f2cae4325482fd 3 | size 17162 4 | -------------------------------------------------------------------------------- /problem_sets/problem_set_7.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# QuantEcon Datascience: Problem Set 7" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "hide-output": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "import matplotlib.colors as mplc\n", 19 | "import matplotlib.patches as patches\n", 20 | "import matplotlib.pyplot as plt\n", 21 | "import pandas as pd\n", 22 | "import qeds" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "## Question 1\n", 30 | "\n", 31 | "From [Data Visualization: Rules and Guidelines](../applications/visualization_rules)\n", 32 | "\n", 33 | "Using the data on Canadian GDP growth below, create a bar chart which\n", 34 | "uses one color for the bars for the years 2000 to 2008, a red for\n", 35 | "2009, and the same color as before for 2010 to 2018." 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": null, 41 | "metadata": { 42 | "hide-output": false 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "ca_gdp = pd.Series(\n", 47 | " [5.2, 1.8, 3.0, 1.9, 3.1, 3.2, 2.8, 2.2, 1.0, -2.8, 3.2, 3.1, 1.7, 2.5, 2.9, 1.0, 1.4, 3.0],\n", 48 | " index=list(range(2000, 2018))\n", 49 | ")\n", 50 | "\n", 51 | "fig, ax = plt.subplots()\n", 52 | "\n", 53 | "for side in [\"right\", \"top\", \"left\", \"bottom\"]:\n", 54 | " ax.spines[side].set_visible(False)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "## Question 2\n", 62 | "\n", 63 | "From [Data Visualization: Rules and Guidelines](../applications/visualization_rules)\n", 64 | "\n", 65 | "Modify the code below to create a draft of another way we could have\n", 66 | "organized time and education. That is, have two subplots (one for each\n", 67 | "education level) and four groups of points (one for each year).\n", 68 | "\n", 69 | "Why do you think they chose to organize the information the way they\n", 70 | "did rather than this way?" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "metadata": { 77 | "hide-output": false 78 | }, 79 | "outputs": [], 80 | "source": [ 81 | "# Read in data\n", 82 | "df = pd.read_csv(\"https://storage.googleapis.com/qeds/data/density_wage_data.csv\")\n", 83 | "df[\"year\"] = df.year.astype(int) # Convert year to int\n", 84 | "\n", 85 | "\n", 86 | "def single_scatter_plot(df, year, educ, ax, color):\n", 87 | " \"\"\"\n", 88 | " This function creates a single year's and education level's\n", 89 | " log density to log wage plot\n", 90 | " \"\"\"\n", 91 | " # Filter data to keep only the data of interest\n", 92 | " _df = df.query(\"(year == @year) & (group == @educ)\")\n", 93 | " _df.plot(\n", 94 | " kind=\"scatter\", x=\"density_log\", y=\"wages_logs\", ax=ax, color=color\n", 95 | " )\n", 96 | "\n", 97 | " return ax\n", 98 | "\n", 99 | "# Create initial plot\n", 100 | "fig, ax = plt.subplots(1, 4, figsize=(16, 6), sharey=True)\n", 101 | "\n", 102 | "for (i, year) in enumerate(df.year.unique()):\n", 103 | " single_scatter_plot(df, year, \"college\", ax[i], \"b\")\n", 104 | " single_scatter_plot(df, year, \"noncollege\", ax[i], \"r\")\n", 105 | " ax[i].set_title(str(year))" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "metadata": {}, 111 | "source": [ 112 | "## Questions 3-5\n", 113 | "\n", 114 | "These question uses a data set from the [Bureau of Transportation\n", 115 | "Statistics]([https://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time](https://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time))\n", 116 | "that describes the cause for all flight delays for US domestic flights\n", 117 | "in November 2016. We used this same data in the previous problem set." 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "hide-output": false 125 | }, 126 | "outputs": [], 127 | "source": [ 128 | "air_perf = qeds.load(\"airline_performance_dec16\") #[[\"CRSDepTime\", \"Carrier\", \"CarrierDelay\", \"ArrDelay\"]]\n", 129 | "air_perf.info()\n", 130 | "air_perf.head" 131 | ] 132 | }, 133 | { 134 | "cell_type": "markdown", 135 | "metadata": {}, 136 | "source": [ 137 | "The following questions are intentionally somewhat open ended. For\n", 138 | "each one, you should carefully choose the type of visualization and\n", 139 | "put some effort into the choice of colors, labels, and other\n", 140 | "formatting." 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": {}, 146 | "source": [ 147 | "### Question 3\n", 148 | "\n", 149 | "Create a visualization of the relationship between airline (Carrier)\n", 150 | "and delays." 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "### Question 4\n", 158 | "\n", 159 | "Create a visualization of the relationship between date and delays." 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "### Question 5\n", 167 | "\n", 168 | "Create a visualization of the relationship between location (origin\n", 169 | "and/or destination) and delays." 170 | ] 171 | } 172 | ], 173 | "metadata": { 174 | "filename": "problem_set_7.rst", 175 | "kernelspec": { 176 | "display_name": "Python", 177 | "language": "python3", 178 | "name": "python3" 179 | }, 180 | "title": "QuantEcon Datascience: Problem Set 7" 181 | }, 182 | "nbformat": 4, 183 | "nbformat_minor": 2 184 | } -------------------------------------------------------------------------------- /pyfun/basics.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ee326986a8179909bf13708baf8fcb9e697ca2017f1b3a5501ffb7e4e5be63c7 3 | size 45282 4 | -------------------------------------------------------------------------------- /pyfun/collections.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4f4b525e5323f5c3a113a1048718d3bd348172c1cacf41f8ed08df159f3cbfc3 3 | size 42323 4 | -------------------------------------------------------------------------------- /pyfun/control_flow.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c6e252757417b1ecbd2e42e8bf13b89197c7d5c9817d1ad1e74a8d957e49ba7b 3 | size 31231 4 | -------------------------------------------------------------------------------- /pyfun/functions.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:533799acef283e744f407e9370e2b296b2a9798e0381dd6bf75942a6ca13f567 3 | size 27741 4 | -------------------------------------------------------------------------------- /pyfun/index.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d327e876e50cfd0b6dbc2c515c7e94dba10eef37d3ef8c80ca9b81bd716b9fb8 3 | size 2517 4 | -------------------------------------------------------------------------------- /pyfun/intro.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:7b08a3149fd942c8c59ffbaf78d45ca430141e8afb29bb253090994f5413fbd0 3 | size 10024 4 | -------------------------------------------------------------------------------- /pyfun/local_install.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d1b5a61f7f4e436ddbaa684ec17bd1eb08cabf020278c41d8cec13db8373711d 3 | size 3823 4 | -------------------------------------------------------------------------------- /scientific/applied_linalg.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:33b081d5a602058b58024355583d53a5696f7c7c6755a90d548fcc9db007311a 3 | size 81815 4 | -------------------------------------------------------------------------------- /scientific/index.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:f326a6ae7c0994f578275d9187c96040aaf93922b1956df1208f4fca1c520f8c 3 | size 1363 4 | -------------------------------------------------------------------------------- /scientific/numpy_arrays.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c22fa067bf379df7850916c67da3e4d365562b7b5f4ba77d76518c076377ef12 3 | size 24931 4 | -------------------------------------------------------------------------------- /scientific/optimization.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:2ac9c286fb00bf958a0cb13c9d2e23d9ddb818d6714ac9b7ab3cd364146a008f 3 | size 148522 4 | -------------------------------------------------------------------------------- /scientific/plotting.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:f86d9fbb0ef53ca25ccd5778b023db6fc6fc9cf5b22ffa60a2e0eccad5c9bb43 3 | size 104567 4 | -------------------------------------------------------------------------------- /scientific/randomness.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:f7e2a0458023230eb2bb241ae631df59a75fca64cf31a01dface20e5cdd3432f 3 | size 108461 4 | -------------------------------------------------------------------------------- /utilities.ipynb: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:45d4c60f84d2a3fa20cb330ca1d86e2c64074bf13d5da71bbc9bd8021890000b 3 | size 5744 4 | --------------------------------------------------------------------------------