Influence IQ: Airbnb amenity combinations in three cities
Reproduction package • September 2026 snapshots

This package reproduces a comparison of declared Wi-Fi, dedicated workspace,
kitchen and washer access in Austin, London and Bangkok. The cohort is entire-home
listings with one bedroom and a maximum listed capacity of two guests. It describes
captured listing supply, not actual stays, physical inspections or guest demand.

The download contains analysis code and aggregate tables. It does not contain the
source listing files, listing or host identifiers, photographs, descriptions,
reviews, coordinates or credentials. Public scrape_id values in aggregate metadata
are source-batch codes, not listing or host identifiers.

RUN LOCALLY

1. Use Python 3.10 or later. No third-party packages are needed.
2. Obtain the three original public gzip files listed in source-manifest.json.
   Save them in one directory with exactly these names:
     austin-listings.csv.gz
     london-listings.csv.gz
     bangkok-listings.csv.gz
   Respect the provider's data policies: obtain only the files needed, download
   each once, and reuse your local copies. This program makes no network requests.
3. Run from this package directory:
     python3 analyze.py --data-dir /path/to/data --output-dir /path/to/new-results
   The output directory must not already exist. Source byte sizes and SHA256
   hashes are checked before any rows are analyzed. A changed file is rejected;
   the program does not silently substitute a later snapshot.
4. Optional synthetic boundary checks, without any source files:
     python3 analyze.py --self-test

The expected aggregate files are in reference-results/. Results are deterministic
for the specified source bytes. A reproduction run's receipt has its own timestamps
and Python version; those are expected to differ. Hashes of results.json and the
CSV files should match the reference files. See package-verification.json for the
clean-directory reproduction and independent-review linkage.

FILES

- analyze.py: portable standard-library analysis, with synthetic boundary checks.
- analysis-plan.json and token-mapping.json: exact prospectively frozen inputs.
- analysis-freeze.json: the original pre-outcome timestamp and SHA256 record.
- source-manifest.json: public source URLs, required local filenames, sizes/hashes.
- source-clarification.json: post-unblinding correction about blank discovery labels.
- methodology.txt: definitions, denominators, analysis choices and fixed checks.
- attribution.txt: source credit, reuse information and publication boundary.
- independent-review.json: independent numerical reconciliation of the original run.
- package-verification.json: portability and equality checks for this distribution.
- reference-results/results.json: every aggregate result and qualification check.
- reference-results/complete-metrics.csv: 225 rows, including all 16 combinations
  in every city and variant, marginals, joint shares and conditional shares.
- reference-results/conditional-contrasts.csv: all 36 signed city-pair comparisons.
- reference-results/cohort-flow.csv: every cohort inclusion/exclusion count.
- reference-results/variant-summary.csv: the nine city-by-variant denominators.
- reference-results/composition-counts.csv: source/property/batch composition counts.
- reference-results/capture-dates.csv: actual captured date ranges by scope.
- reference-results/synthetic-check.json: synthetic boundary-check result.
- reference-results/run-receipt.json: code, input and output hashes for reference run.

READ THIS CORRECTION WITH THE FROZEN PLAN

The blinded inventory enumerated nonempty source labels only. Its only nonempty
label was "previous scrape", but many source cells are blank. A blank is unknown;
it must not be treated as "neighbourhood search" or as "previous scrape". There is
no observed neighbourhood-search category, so the proposed source comparison is
not estimable. The frozen plan is retained unchanged for transparency. This
clarification changes no numbers, cohorts, mappings, thresholds or decisions.
