Estimation Mode

Ben Stabler edited this page Jul 9, 2020 · 45 revisions

See Phase 5 Task 9 for an overview of the task.

Estimation tools

See Estimation Tools Review for a review of the characteristics, pros, cons and selection of the best estimation tool to prototype estimation mode integration.

Integration

A script will transform the activitysim estimation data export to estimation formats, run the estimation tool, and update the activitysim model coefficients.

The basic workflow:

  • Run a 2k household sample up through a model such as tour_mode_choice to create a synthetic version of a household travel survey in activitysim format up to that point. In reality the user uses their actual household survey and not a synthetic one.
  • The output files then becomes the input to running activitysim in estimation mode.
  • We then run just tour_mode_choice again, but this time with estimation mode set to true to write out all the required data for re-estimating the model. We're calling this the estimation data bundle (EDB), which is somewhat like the trace data, but for every household:
    • chooser table
    • expression values table
    • coefficients table
    • choices table
    • raw_utilities table (to determine if alternatives are available)
    • Plus model specification inputs such as the yaml, spec, etc
  • A pandas script then:
    • Reads the chooser table, expression values, raw_utilities, tour_mode_choice.yaml, tour_mode_choice.csv, and tour_mode_choice_coeffs.csv
    • Transforms the data into the formats required by the estimation tool
    • Runs estimation
    • Writes the output coefficients back to activitysim format

Some additional considerations

  • We need to better separate coefficients from data so the coefficients can be re-estimated in the estimation tool and then easily passed back to asim for model simulation. I think this means every logit model needs an explicit coefficients.csv input file now.
  • We will also read in the observed_choice (alternative) in order to use it instead of the chosen alternative for subsequent model step re-estimation. This includes for post-processor annotators as well.
  • When we do destination choice, if destination sampling is done, then the observed alternative may not be in the estimation data bundle. To get started, we'll just run it without sampling for now so we get all the alternatives, and think about how best to do this.
  • Estimation mode runs singled processed and doesn't use shadow pricing.
  • Inspired by DaySim estimation mode design, which means new terms / alternative model structures (say changing the nesting structure) are done first in asim and then required data is written out to the estimation tool.

Getting started

  • We will prototype tour mode choice
  • We will use CSV formats
  • Create the 2k HH asim format HH survey through tour_mode_choice
  • Clean-up coefficients separation #303 and write out the estimation data bundle #304
  • Write pandas script to transform data, run estimation tool, transform coefficient file, etc.
  • We'll create a first version and then iterate as needed
  • For now we're focused on just the integration with the estimation tool; we'll work on the "using the observed choice and running downstream models" need in the second half of this task

Estimation Recipes by Submode

The following table lists estimation functionality by submodel. An estimation recipe defines the type of model for writing the estimation data bundle (EDB) and the example larch notebook illustrates round-trip estimation integration. An entry in the estimation recipe or example larch notebook column means the functionality has been implemented to date.

EstimatableSubmodelEstimation Recipe (including reading survey files, overriding choices, and writing EDBs)Estimation with Larch Example Notebook
initialize_landuse
compute_accessibility
initialize_households
xschool_locationinteraction_sample_simulatenotebook
xworkplace_locationinteraction_sample_simulatenotebook
xauto_ownership_simulatesimple_simulatenotebook
xfree_parkingsimple_simulate
xcdap_simulatecdap_simulate
xmandatory_tour_frequencysimple_simulate
xmandatory_tour_schedulinginteraction_sample_simulate
xjoint_tour_frequencysimple_simulate
xjoint_tour_compositionsimple_simulate
xjoint_tour_participationsimple_simulate
xjoint_tour_destinationinteraction_sample_simulate
xjoint_tour_schedulinginteraction_sample_simulate
xnon_mandatory_tour_frequencyinteraction_simulate
xnon_mandatory_tour_destinationinteraction_sample_simulate
xnon_mandatory_tour_schedulinginteraction_sample_simulate
xtour_mode_choice_simulatesimple_simulatenotebook
xatwork_subtour_frequencysimple_simulate
xatwork_subtour_destinationinteraction_sample_simulate
xatwork_subtour_schedulinginteraction_sample_simulate
xatwork_subtour_mode_choicesimple_simulate
xstop_frequency
trip_purpose
xtrip_destination
trip_purpose_and_destination
xtrip_scheduling
xtrip_mode_choice
write_data_dictionary
track_skim_usage
write_trip_matrices
write_tables

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Estimation Mode

Ben Stabler edited this page Jul 9, 2020 · 45 revisions

See Phase 5 Task 9 for an overview of the task.

Estimation tools

See Estimation Tools Review for a review of the characteristics, pros, cons and selection of the best estimation tool to prototype estimation mode integration.

Integration

A script will transform the activitysim estimation data export to estimation formats, run the estimation tool, and update the activitysim model coefficients.

The basic workflow:

  • Run a 2k household sample up through a model such as tour_mode_choice to create a synthetic version of a household travel survey in activitysim format up to that point. In reality the user uses their actual household survey and not a synthetic one.
  • The output files then becomes the input to running activitysim in estimation mode.
  • We then run just tour_mode_choice again, but this time with estimation mode set to true to write out all the required data for re-estimating the model. We're calling this the estimation data bundle (EDB), which is somewhat like the trace data, but for every household:
    • chooser table
    • expression values table
    • coefficients table
    • choices table
    • raw_utilities table (to determine if alternatives are available)
    • Plus model specification inputs such as the yaml, spec, etc
  • A pandas script then:
    • Reads the chooser table, expression values, raw_utilities, tour_mode_choice.yaml, tour_mode_choice.csv, and tour_mode_choice_coeffs.csv
    • Transforms the data into the formats required by the estimation tool
    • Runs estimation
    • Writes the output coefficients back to activitysim format

Some additional considerations

  • We need to better separate coefficients from data so the coefficients can be re-estimated in the estimation tool and then easily passed back to asim for model simulation. I think this means every logit model needs an explicit coefficients.csv input file now.
  • We will also read in the observed_choice (alternative) in order to use it instead of the chosen alternative for subsequent model step re-estimation. This includes for post-processor annotators as well.
  • When we do destination choice, if destination sampling is done, then the observed alternative may not be in the estimation data bundle. To get started, we'll just run it without sampling for now so we get all the alternatives, and think about how best to do this.
  • Estimation mode runs singled processed and doesn't use shadow pricing.
  • Inspired by DaySim estimation mode design, which means new terms / alternative model structures (say changing the nesting structure) are done first in asim and then required data is written out to the estimation tool.

Getting started

  • We will prototype tour mode choice
  • We will use CSV formats
  • Create the 2k HH asim format HH survey through tour_mode_choice
  • Clean-up coefficients separation #303 and write out the estimation data bundle #304
  • Write pandas script to transform data, run estimation tool, transform coefficient file, etc.
  • We'll create a first version and then iterate as needed
  • For now we're focused on just the integration with the estimation tool; we'll work on the "using the observed choice and running downstream models" need in the second half of this task

Estimation Recipes by Submode

The following table lists estimation functionality by submodel. An estimation recipe defines the type of model for writing the estimation data bundle (EDB) and the example larch notebook illustrates round-trip estimation integration. An entry in the estimation recipe or example larch notebook column means the functionality has been implemented to date.

EstimatableSubmodelEstimation Recipe (including reading survey files, overriding choices, and writing EDBs)Estimation with Larch Example Notebook
initialize_landuse
compute_accessibility
initialize_households
xschool_locationinteraction_sample_simulatenotebook
xworkplace_locationinteraction_sample_simulatenotebook
xauto_ownership_simulatesimple_simulatenotebook
xfree_parkingsimple_simulate
xcdap_simulatecdap_simulate
xmandatory_tour_frequencysimple_simulate
xmandatory_tour_schedulinginteraction_sample_simulate
xjoint_tour_frequencysimple_simulate
xjoint_tour_compositionsimple_simulate
xjoint_tour_participationsimple_simulate
xjoint_tour_destinationinteraction_sample_simulate
xjoint_tour_schedulinginteraction_sample_simulate
xnon_mandatory_tour_frequencyinteraction_simulate
xnon_mandatory_tour_destinationinteraction_sample_simulate
xnon_mandatory_tour_schedulinginteraction_sample_simulate
xtour_mode_choice_simulatesimple_simulatenotebook
xatwork_subtour_frequencysimple_simulate
xatwork_subtour_destinationinteraction_sample_simulate
xatwork_subtour_schedulinginteraction_sample_simulate
xatwork_subtour_mode_choicesimple_simulate
xstop_frequency
trip_purpose
xtrip_destination
trip_purpose_and_destination
xtrip_scheduling
xtrip_mode_choice
write_data_dictionary
track_skim_usage
write_trip_matrices
write_tables

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Estimation Mode

Ben Stabler edited this page Jul 9, 2020 · 45 revisions

See Phase 5 Task 9 for an overview of the task.

Estimation tools

See Estimation Tools Review for a review of the characteristics, pros, cons and selection of the best estimation tool to prototype estimation mode integration.

Integration

A script will transform the activitysim estimation data export to estimation formats, run the estimation tool, and update the activitysim model coefficients.

The basic workflow:

  • Run a 2k household sample up through a model such as tour_mode_choice to create a synthetic version of a household travel survey in activitysim format up to that point. In reality the user uses their actual household survey and not a synthetic one.
  • The output files then becomes the input to running activitysim in estimation mode.
  • We then run just tour_mode_choice again, but this time with estimation mode set to true to write out all the required data for re-estimating the model. We're calling this the estimation data bundle (EDB), which is somewhat like the trace data, but for every household:
    • chooser table
    • expression values table
    • coefficients table
    • choices table
    • raw_utilities table (to determine if alternatives are available)
    • Plus model specification inputs such as the yaml, spec, etc
  • A pandas script then:
    • Reads the chooser table, expression values, raw_utilities, tour_mode_choice.yaml, tour_mode_choice.csv, and tour_mode_choice_coeffs.csv
    • Transforms the data into the formats required by the estimation tool
    • Runs estimation
    • Writes the output coefficients back to activitysim format

Some additional considerations

  • We need to better separate coefficients from data so the coefficients can be re-estimated in the estimation tool and then easily passed back to asim for model simulation. I think this means every logit model needs an explicit coefficients.csv input file now.
  • We will also read in the observed_choice (alternative) in order to use it instead of the chosen alternative for subsequent model step re-estimation. This includes for post-processor annotators as well.
  • When we do destination choice, if destination sampling is done, then the observed alternative may not be in the estimation data bundle. To get started, we'll just run it without sampling for now so we get all the alternatives, and think about how best to do this.
  • Estimation mode runs singled processed and doesn't use shadow pricing.
  • Inspired by DaySim estimation mode design, which means new terms / alternative model structures (say changing the nesting structure) are done first in asim and then required data is written out to the estimation tool.

Getting started

  • We will prototype tour mode choice
  • We will use CSV formats
  • Create the 2k HH asim format HH survey through tour_mode_choice
  • Clean-up coefficients separation #303 and write out the estimation data bundle #304
  • Write pandas script to transform data, run estimation tool, transform coefficient file, etc.
  • We'll create a first version and then iterate as needed
  • For now we're focused on just the integration with the estimation tool; we'll work on the "using the observed choice and running downstream models" need in the second half of this task

Estimation Recipes by Submode

The following table lists estimation functionality by submodel. An estimation recipe defines the type of model for writing the estimation data bundle (EDB) and the example larch notebook illustrates round-trip estimation integration. An entry in the estimation recipe or example larch notebook column means the functionality has been implemented to date.

EstimatableSubmodelEstimation Recipe (including reading survey files, overriding choices, and writing EDBs)Estimation with Larch Example Notebook
initialize_landuse
compute_accessibility
initialize_households
xschool_locationinteraction_sample_simulatenotebook
xworkplace_locationinteraction_sample_simulatenotebook
xauto_ownership_simulatesimple_simulatenotebook
xfree_parkingsimple_simulate
xcdap_simulatecdap_simulate
xmandatory_tour_frequencysimple_simulate
xmandatory_tour_schedulinginteraction_sample_simulate
xjoint_tour_frequencysimple_simulate
xjoint_tour_compositionsimple_simulate
xjoint_tour_participationsimple_simulate
xjoint_tour_destinationinteraction_sample_simulate
xjoint_tour_schedulinginteraction_sample_simulate
xnon_mandatory_tour_frequencyinteraction_simulate
xnon_mandatory_tour_destinationinteraction_sample_simulate
xnon_mandatory_tour_schedulinginteraction_sample_simulate
xtour_mode_choice_simulatesimple_simulatenotebook
xatwork_subtour_frequencysimple_simulate
xatwork_subtour_destinationinteraction_sample_simulate
xatwork_subtour_schedulinginteraction_sample_simulate
xatwork_subtour_mode_choicesimple_simulate
xstop_frequency
trip_purpose
xtrip_destination
trip_purpose_and_destination
xtrip_scheduling
xtrip_mode_choice
write_data_dictionary
track_skim_usage
write_trip_matrices
write_tables

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Estimation Mode

Ben Stabler edited this page Jul 9, 2020 · 45 revisions

See Phase 5 Task 9 for an overview of the task.

Estimation tools

See Estimation Tools Review for a review of the characteristics, pros, cons and selection of the best estimation tool to prototype estimation mode integration.

Integration

A script will transform the activitysim estimation data export to estimation formats, run the estimation tool, and update the activitysim model coefficients.

The basic workflow:

  • Run a 2k household sample up through a model such as tour_mode_choice to create a synthetic version of a household travel survey in activitysim format up to that point. In reality the user uses their actual household survey and not a synthetic one.
  • The output files then becomes the input to running activitysim in estimation mode.
  • We then run just tour_mode_choice again, but this time with estimation mode set to true to write out all the required data for re-estimating the model. We're calling this the estimation data bundle (EDB), which is somewhat like the trace data, but for every household:
    • chooser table
    • expression values table
    • coefficients table
    • choices table
    • raw_utilities table (to determine if alternatives are available)
    • Plus model specification inputs such as the yaml, spec, etc
  • A pandas script then:
    • Reads the chooser table, expression values, raw_utilities, tour_mode_choice.yaml, tour_mode_choice.csv, and tour_mode_choice_coeffs.csv
    • Transforms the data into the formats required by the estimation tool
    • Runs estimation
    • Writes the output coefficients back to activitysim format

Some additional considerations

  • We need to better separate coefficients from data so the coefficients can be re-estimated in the estimation tool and then easily passed back to asim for model simulation. I think this means every logit model needs an explicit coefficients.csv input file now.
  • We will also read in the observed_choice (alternative) in order to use it instead of the chosen alternative for subsequent model step re-estimation. This includes for post-processor annotators as well.
  • When we do destination choice, if destination sampling is done, then the observed alternative may not be in the estimation data bundle. To get started, we'll just run it without sampling for now so we get all the alternatives, and think about how best to do this.
  • Estimation mode runs singled processed and doesn't use shadow pricing.
  • Inspired by DaySim estimation mode design, which means new terms / alternative model structures (say changing the nesting structure) are done first in asim and then required data is written out to the estimation tool.

Getting started

  • We will prototype tour mode choice
  • We will use CSV formats
  • Create the 2k HH asim format HH survey through tour_mode_choice
  • Clean-up coefficients separation #303 and write out the estimation data bundle #304
  • Write pandas script to transform data, run estimation tool, transform coefficient file, etc.
  • We'll create a first version and then iterate as needed
  • For now we're focused on just the integration with the estimation tool; we'll work on the "using the observed choice and running downstream models" need in the second half of this task

Estimation Recipes by Submode

The following table lists estimation functionality by submodel. An estimation recipe defines the type of model for writing the estimation data bundle (EDB) and the example larch notebook illustrates round-trip estimation integration. An entry in the estimation recipe or example larch notebook column means the functionality has been implemented to date.

EstimatableSubmodelEstimation Recipe (including reading survey files, overriding choices, and writing EDBs)Estimation with Larch Example Notebook
initialize_landuse
compute_accessibility
initialize_households
xschool_locationinteraction_sample_simulatenotebook
xworkplace_locationinteraction_sample_simulatenotebook
xauto_ownership_simulatesimple_simulatenotebook
xfree_parkingsimple_simulate
xcdap_simulatecdap_simulate
xmandatory_tour_frequencysimple_simulate
xmandatory_tour_schedulinginteraction_sample_simulate
xjoint_tour_frequencysimple_simulate
xjoint_tour_compositionsimple_simulate
xjoint_tour_participationsimple_simulate
xjoint_tour_destinationinteraction_sample_simulate
xjoint_tour_schedulinginteraction_sample_simulate
xnon_mandatory_tour_frequencyinteraction_simulate
xnon_mandatory_tour_destinationinteraction_sample_simulate
xnon_mandatory_tour_schedulinginteraction_sample_simulate
xtour_mode_choice_simulatesimple_simulatenotebook
xatwork_subtour_frequencysimple_simulate
xatwork_subtour_destinationinteraction_sample_simulate
xatwork_subtour_schedulinginteraction_sample_simulate
xatwork_subtour_mode_choicesimple_simulate
xstop_frequency
trip_purpose
xtrip_destination
trip_purpose_and_destination
xtrip_scheduling
xtrip_mode_choice
write_data_dictionary
track_skim_usage
write_trip_matrices
write_tables

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Estimation Mode

Ben Stabler edited this page Jul 9, 2020 · 45 revisions

See Phase 5 Task 9 for an overview of the task.

Estimation tools

See Estimation Tools Review for a review of the characteristics, pros, cons and selection of the best estimation tool to prototype estimation mode integration.

Integration

A script will transform the activitysim estimation data export to estimation formats, run the estimation tool, and update the activitysim model coefficients.

The basic workflow:

  • Run a 2k household sample up through a model such as tour_mode_choice to create a synthetic version of a household travel survey in activitysim format up to that point. In reality the user uses their actual household survey and not a synthetic one.
  • The output files then becomes the input to running activitysim in estimation mode.
  • We then run just tour_mode_choice again, but this time with estimation mode set to true to write out all the required data for re-estimating the model. We're calling this the estimation data bundle (EDB), which is somewhat like the trace data, but for every household:
    • chooser table
    • expression values table
    • coefficients table
    • choices table
    • raw_utilities table (to determine if alternatives are available)
    • Plus model specification inputs such as the yaml, spec, etc
  • A pandas script then:
    • Reads the chooser table, expression values, raw_utilities, tour_mode_choice.yaml, tour_mode_choice.csv, and tour_mode_choice_coeffs.csv
    • Transforms the data into the formats required by the estimation tool
    • Runs estimation
    • Writes the output coefficients back to activitysim format

Some additional considerations

  • We need to better separate coefficients from data so the coefficients can be re-estimated in the estimation tool and then easily passed back to asim for model simulation. I think this means every logit model needs an explicit coefficients.csv input file now.
  • We will also read in the observed_choice (alternative) in order to use it instead of the chosen alternative for subsequent model step re-estimation. This includes for post-processor annotators as well.
  • When we do destination choice, if destination sampling is done, then the observed alternative may not be in the estimation data bundle. To get started, we'll just run it without sampling for now so we get all the alternatives, and think about how best to do this.
  • Estimation mode runs singled processed and doesn't use shadow pricing.
  • Inspired by DaySim estimation mode design, which means new terms / alternative model structures (say changing the nesting structure) are done first in asim and then required data is written out to the estimation tool.

Getting started

  • We will prototype tour mode choice
  • We will use CSV formats
  • Create the 2k HH asim format HH survey through tour_mode_choice
  • Clean-up coefficients separation #303 and write out the estimation data bundle #304
  • Write pandas script to transform data, run estimation tool, transform coefficient file, etc.
  • We'll create a first version and then iterate as needed
  • For now we're focused on just the integration with the estimation tool; we'll work on the "using the observed choice and running downstream models" need in the second half of this task

Estimation Recipes by Submode

The following table lists estimation functionality by submodel. An estimation recipe defines the type of model for writing the estimation data bundle (EDB) and the example larch notebook illustrates round-trip estimation integration. An entry in the estimation recipe or example larch notebook column means the functionality has been implemented to date.

EstimatableSubmodelEstimation Recipe (including reading survey files, overriding choices, and writing EDBs)Estimation with Larch Example Notebook
initialize_landuse
compute_accessibility
initialize_households
xschool_locationinteraction_sample_simulatenotebook
xworkplace_locationinteraction_sample_simulatenotebook
xauto_ownership_simulatesimple_simulatenotebook
xfree_parkingsimple_simulate
xcdap_simulatecdap_simulate
xmandatory_tour_frequencysimple_simulate
xmandatory_tour_schedulinginteraction_sample_simulate
xjoint_tour_frequencysimple_simulate
xjoint_tour_compositionsimple_simulate
xjoint_tour_participationsimple_simulate
xjoint_tour_destinationinteraction_sample_simulate
xjoint_tour_schedulinginteraction_sample_simulate
xnon_mandatory_tour_frequencyinteraction_simulate
xnon_mandatory_tour_destinationinteraction_sample_simulate
xnon_mandatory_tour_schedulinginteraction_sample_simulate
xtour_mode_choice_simulatesimple_simulatenotebook
xatwork_subtour_frequencysimple_simulate
xatwork_subtour_destinationinteraction_sample_simulate
xatwork_subtour_schedulinginteraction_sample_simulate
xatwork_subtour_mode_choicesimple_simulate
xstop_frequency
trip_purpose
xtrip_destination
trip_purpose_and_destination
xtrip_scheduling
xtrip_mode_choice
write_data_dictionary
track_skim_usage
write_trip_matrices
write_tables

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Estimation Mode

Ben Stabler edited this page Jul 9, 2020 · 45 revisions

See Phase 5 Task 9 for an overview of the task.

Estimation tools

See Estimation Tools Review for a review of the characteristics, pros, cons and selection of the best estimation tool to prototype estimation mode integration.

Integration

A script will transform the activitysim estimation data export to estimation formats, run the estimation tool, and update the activitysim model coefficients.

The basic workflow:

  • Run a 2k household sample up through a model such as tour_mode_choice to create a synthetic version of a household travel survey in activitysim format up to that point. In reality the user uses their actual household survey and not a synthetic one.
  • The output files then becomes the input to running activitysim in estimation mode.
  • We then run just tour_mode_choice again, but this time with estimation mode set to true to write out all the required data for re-estimating the model. We're calling this the estimation data bundle (EDB), which is somewhat like the trace data, but for every household:
    • chooser table
    • expression values table
    • coefficients table
    • choices table
    • raw_utilities table (to determine if alternatives are available)
    • Plus model specification inputs such as the yaml, spec, etc
  • A pandas script then:
    • Reads the chooser table, expression values, raw_utilities, tour_mode_choice.yaml, tour_mode_choice.csv, and tour_mode_choice_coeffs.csv
    • Transforms the data into the formats required by the estimation tool
    • Runs estimation
    • Writes the output coefficients back to activitysim format

Some additional considerations

  • We need to better separate coefficients from data so the coefficients can be re-estimated in the estimation tool and then easily passed back to asim for model simulation. I think this means every logit model needs an explicit coefficients.csv input file now.
  • We will also read in the observed_choice (alternative) in order to use it instead of the chosen alternative for subsequent model step re-estimation. This includes for post-processor annotators as well.
  • When we do destination choice, if destination sampling is done, then the observed alternative may not be in the estimation data bundle. To get started, we'll just run it without sampling for now so we get all the alternatives, and think about how best to do this.
  • Estimation mode runs singled processed and doesn't use shadow pricing.
  • Inspired by DaySim estimation mode design, which means new terms / alternative model structures (say changing the nesting structure) are done first in asim and then required data is written out to the estimation tool.

Getting started

  • We will prototype tour mode choice
  • We will use CSV formats
  • Create the 2k HH asim format HH survey through tour_mode_choice
  • Clean-up coefficients separation #303 and write out the estimation data bundle #304
  • Write pandas script to transform data, run estimation tool, transform coefficient file, etc.
  • We'll create a first version and then iterate as needed
  • For now we're focused on just the integration with the estimation tool; we'll work on the "using the observed choice and running downstream models" need in the second half of this task

Estimation Recipes by Submode

The following table lists estimation functionality by submodel. An estimation recipe defines the type of model for writing the estimation data bundle (EDB) and the example larch notebook illustrates round-trip estimation integration. An entry in the estimation recipe or example larch notebook column means the functionality has been implemented to date.

EstimatableSubmodelEstimation Recipe (including reading survey files, overriding choices, and writing EDBs)Estimation with Larch Example Notebook
initialize_landuse
compute_accessibility
initialize_households
xschool_locationinteraction_sample_simulatenotebook
xworkplace_locationinteraction_sample_simulatenotebook
xauto_ownership_simulatesimple_simulatenotebook
xfree_parkingsimple_simulate
xcdap_simulatecdap_simulate
xmandatory_tour_frequencysimple_simulate
xmandatory_tour_schedulinginteraction_sample_simulate
xjoint_tour_frequencysimple_simulate
xjoint_tour_compositionsimple_simulate
xjoint_tour_participationsimple_simulate
xjoint_tour_destinationinteraction_sample_simulate
xjoint_tour_schedulinginteraction_sample_simulate
xnon_mandatory_tour_frequencyinteraction_simulate
xnon_mandatory_tour_destinationinteraction_sample_simulate
xnon_mandatory_tour_schedulinginteraction_sample_simulate
xtour_mode_choice_simulatesimple_simulatenotebook
xatwork_subtour_frequencysimple_simulate
xatwork_subtour_destinationinteraction_sample_simulate
xatwork_subtour_schedulinginteraction_sample_simulate
xatwork_subtour_mode_choicesimple_simulate
xstop_frequency
trip_purpose
xtrip_destination
trip_purpose_and_destination
xtrip_scheduling
xtrip_mode_choice
write_data_dictionary
track_skim_usage
write_trip_matrices
write_tables

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Estimation Mode

Ben Stabler edited this page Jul 9, 2020 · 45 revisions

See Phase 5 Task 9 for an overview of the task.

Estimation tools

See Estimation Tools Review for a review of the characteristics, pros, cons and selection of the best estimation tool to prototype estimation mode integration.

Integration

A script will transform the activitysim estimation data export to estimation formats, run the estimation tool, and update the activitysim model coefficients.

The basic workflow:

  • Run a 2k household sample up through a model such as tour_mode_choice to create a synthetic version of a household travel survey in activitysim format up to that point. In reality the user uses their actual household survey and not a synthetic one.
  • The output files then becomes the input to running activitysim in estimation mode.
  • We then run just tour_mode_choice again, but this time with estimation mode set to true to write out all the required data for re-estimating the model. We're calling this the estimation data bundle (EDB), which is somewhat like the trace data, but for every household:
    • chooser table
    • expression values table
    • coefficients table
    • choices table
    • raw_utilities table (to determine if alternatives are available)
    • Plus model specification inputs such as the yaml, spec, etc
  • A pandas script then:
    • Reads the chooser table, expression values, raw_utilities, tour_mode_choice.yaml, tour_mode_choice.csv, and tour_mode_choice_coeffs.csv
    • Transforms the data into the formats required by the estimation tool
    • Runs estimation
    • Writes the output coefficients back to activitysim format

Some additional considerations

  • We need to better separate coefficients from data so the coefficients can be re-estimated in the estimation tool and then easily passed back to asim for model simulation. I think this means every logit model needs an explicit coefficients.csv input file now.
  • We will also read in the observed_choice (alternative) in order to use it instead of the chosen alternative for subsequent model step re-estimation. This includes for post-processor annotators as well.
  • When we do destination choice, if destination sampling is done, then the observed alternative may not be in the estimation data bundle. To get started, we'll just run it without sampling for now so we get all the alternatives, and think about how best to do this.
  • Estimation mode runs singled processed and doesn't use shadow pricing.
  • Inspired by DaySim estimation mode design, which means new terms / alternative model structures (say changing the nesting structure) are done first in asim and then required data is written out to the estimation tool.

Getting started

  • We will prototype tour mode choice
  • We will use CSV formats
  • Create the 2k HH asim format HH survey through tour_mode_choice
  • Clean-up coefficients separation #303 and write out the estimation data bundle #304
  • Write pandas script to transform data, run estimation tool, transform coefficient file, etc.
  • We'll create a first version and then iterate as needed
  • For now we're focused on just the integration with the estimation tool; we'll work on the "using the observed choice and running downstream models" need in the second half of this task

Estimation Recipes by Submode

The following table lists estimation functionality by submodel. An estimation recipe defines the type of model for writing the estimation data bundle (EDB) and the example larch notebook illustrates round-trip estimation integration. An entry in the estimation recipe or example larch notebook column means the functionality has been implemented to date.

EstimatableSubmodelEstimation Recipe (including reading survey files, overriding choices, and writing EDBs)Estimation with Larch Example Notebook
initialize_landuse
compute_accessibility
initialize_households
xschool_locationinteraction_sample_simulatenotebook
xworkplace_locationinteraction_sample_simulatenotebook
xauto_ownership_simulatesimple_simulatenotebook
xfree_parkingsimple_simulate
xcdap_simulatecdap_simulate
xmandatory_tour_frequencysimple_simulate
xmandatory_tour_schedulinginteraction_sample_simulate
xjoint_tour_frequencysimple_simulate
xjoint_tour_compositionsimple_simulate
xjoint_tour_participationsimple_simulate
xjoint_tour_destinationinteraction_sample_simulate
xjoint_tour_schedulinginteraction_sample_simulate
xnon_mandatory_tour_frequencyinteraction_simulate
xnon_mandatory_tour_destinationinteraction_sample_simulate
xnon_mandatory_tour_schedulinginteraction_sample_simulate
xtour_mode_choice_simulatesimple_simulatenotebook
xatwork_subtour_frequencysimple_simulate
xatwork_subtour_destinationinteraction_sample_simulate
xatwork_subtour_schedulinginteraction_sample_simulate
xatwork_subtour_mode_choicesimple_simulate
xstop_frequency
trip_purpose
xtrip_destination
trip_purpose_and_destination
xtrip_scheduling
xtrip_mode_choice
write_data_dictionary
track_skim_usage
write_trip_matrices
write_tables

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Estimation Mode

Ben Stabler edited this page Jul 9, 2020 · 45 revisions

See Phase 5 Task 9 for an overview of the task.

Estimation tools

See Estimation Tools Review for a review of the characteristics, pros, cons and selection of the best estimation tool to prototype estimation mode integration.

Integration

A script will transform the activitysim estimation data export to estimation formats, run the estimation tool, and update the activitysim model coefficients.

The basic workflow:

  • Run a 2k household sample up through a model such as tour_mode_choice to create a synthetic version of a household travel survey in activitysim format up to that point. In reality the user uses their actual household survey and not a synthetic one.
  • The output files then becomes the input to running activitysim in estimation mode.
  • We then run just tour_mode_choice again, but this time with estimation mode set to true to write out all the required data for re-estimating the model. We're calling this the estimation data bundle (EDB), which is somewhat like the trace data, but for every household:
    • chooser table
    • expression values table
    • coefficients table
    • choices table
    • raw_utilities table (to determine if alternatives are available)
    • Plus model specification inputs such as the yaml, spec, etc
  • A pandas script then:
    • Reads the chooser table, expression values, raw_utilities, tour_mode_choice.yaml, tour_mode_choice.csv, and tour_mode_choice_coeffs.csv
    • Transforms the data into the formats required by the estimation tool
    • Runs estimation
    • Writes the output coefficients back to activitysim format

Some additional considerations

  • We need to better separate coefficients from data so the coefficients can be re-estimated in the estimation tool and then easily passed back to asim for model simulation. I think this means every logit model needs an explicit coefficients.csv input file now.
  • We will also read in the observed_choice (alternative) in order to use it instead of the chosen alternative for subsequent model step re-estimation. This includes for post-processor annotators as well.
  • When we do destination choice, if destination sampling is done, then the observed alternative may not be in the estimation data bundle. To get started, we'll just run it without sampling for now so we get all the alternatives, and think about how best to do this.
  • Estimation mode runs singled processed and doesn't use shadow pricing.
  • Inspired by DaySim estimation mode design, which means new terms / alternative model structures (say changing the nesting structure) are done first in asim and then required data is written out to the estimation tool.

Getting started

  • We will prototype tour mode choice
  • We will use CSV formats
  • Create the 2k HH asim format HH survey through tour_mode_choice
  • Clean-up coefficients separation #303 and write out the estimation data bundle #304
  • Write pandas script to transform data, run estimation tool, transform coefficient file, etc.
  • We'll create a first version and then iterate as needed
  • For now we're focused on just the integration with the estimation tool; we'll work on the "using the observed choice and running downstream models" need in the second half of this task

Estimation Recipes by Submode

The following table lists estimation functionality by submodel. An estimation recipe defines the type of model for writing the estimation data bundle (EDB) and the example larch notebook illustrates round-trip estimation integration. An entry in the estimation recipe or example larch notebook column means the functionality has been implemented to date.

EstimatableSubmodelEstimation Recipe (including reading survey files, overriding choices, and writing EDBs)Estimation with Larch Example Notebook
initialize_landuse
compute_accessibility
initialize_households
xschool_locationinteraction_sample_simulatenotebook
xworkplace_locationinteraction_sample_simulatenotebook
xauto_ownership_simulatesimple_simulatenotebook
xfree_parkingsimple_simulate
xcdap_simulatecdap_simulate
xmandatory_tour_frequencysimple_simulate
xmandatory_tour_schedulinginteraction_sample_simulate
xjoint_tour_frequencysimple_simulate
xjoint_tour_compositionsimple_simulate
xjoint_tour_participationsimple_simulate
xjoint_tour_destinationinteraction_sample_simulate
xjoint_tour_schedulinginteraction_sample_simulate
xnon_mandatory_tour_frequencyinteraction_simulate
xnon_mandatory_tour_destinationinteraction_sample_simulate
xnon_mandatory_tour_schedulinginteraction_sample_simulate
xtour_mode_choice_simulatesimple_simulatenotebook
xatwork_subtour_frequencysimple_simulate
xatwork_subtour_destinationinteraction_sample_simulate
xatwork_subtour_schedulinginteraction_sample_simulate
xatwork_subtour_mode_choicesimple_simulate
xstop_frequency
trip_purpose
xtrip_destination
trip_purpose_and_destination
xtrip_scheduling
xtrip_mode_choice
write_data_dictionary
track_skim_usage
write_trip_matrices
write_tables

Clone this wiki locally