Chapter 7 — Thesis synthesis and reproducibility archive
Lesson map
Lesson 07 published. Map, example, EX039.
flowchart TD
N0["Learning outcomes"]
N1["7.1 The synthesis"]
N2["7.2 What goes in the archive"]
N3["7.3 A leak caught"]
N4["7.4 Licensing and access"]
N5["Lab — Manifest and identifier check for the thesis a"]
N6["Synthesis"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
N6 --> EX["Worked example"]
EX --> Q["Exercise EX039"]
Logical drawing
flowchart LR
N0["Learning outcomes"]
N1["7.1 The synthesis"]
N2["7.2 What goes in the archive"]
N3["7.3 A leak caught"]
N4["7.4 Licensing and access"]
N5["Lab — Manifest and identifier check for the thesis a"]
N6["Synthesis"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX039"]
[Learning outcomes]
|
v
[7.1 The synthesis]
|
v
[7.2 What goes in the archive]
|
v
[7.3 A leak caught]
|
v
[7.4 Licensing and access]
|
v
[Lab — Manifest and identifier check for the thesis a]
|
v
[Synthesis]
|
v
[Worked example] --> [Exercise EX039]
Learning outcomes
You will (1) synthesise findings into defensible claims; (2) build a reproducibility archive; (3) check that no identifier leaves in supplementary files.
7.1 The synthesis
Ines writes her central claim carefully. Pseudonymisation alone leaves most synthetic riders re-identifiable. A well-chosen k-anonymised file resists simple linkage but leaks under multi-day attacks. Differentially private counts remove record linkage, with error that is negligible for busy routes and serious for quiet routes at low epsilon. Planners in a structured review accepted counts at epsilon one. The claim is bounded by the synthetic population, three planners and the attacks tested. She checks every sentence of the claim against a table, a figure or a lab output so that nothing in the conclusion floats free of evidence.
7.2 What goes in the archive
Thornbury requires a reproducibility archive. Ines includes the pre-registered protocol, the analysis code with its random seeds, the results tables and a short instruction file that explains how to rerun everything. Each file is listed in a manifest with its SHA-256 digest, so that any later change can be detected. She does not include the synthetic population itself, only the generator and its seed, because the population can be rebuilt exactly. This makes the archive small enough to deposit in the university repository while keeping every number in the thesis reproducible by an examiner with ordinary tools.
7.3 A leak caught
When Ines runs the archive check, it blocks one file. A sample rows file she had added to illustrate the data format contains a column named rider identifier with a token copied from an early test that used real card formats. Although the token is fictitious, the check is designed to stop exactly this kind of slip. She removes the file and replaces it with a format description. The episode illustrates why data protection by design, as described in Article 25 of the GDPR and the EDPB guidelines, includes the research outputs as well as the main system being studied.
7.4 Licensing and access
Ines publishes code under an open licence and states that the generator is synthetic and contains no personal data. She adds a data statement that explains what the archive contains, what it does not, and who to contact at the authority about access to real data under its own procedures. Prof. Aaltonen reminds her that open science and data protection are compatible when the archive is designed for both from the start. She records the statement in the thesis front matter as well as in the archive so that readers who never open the repository still understand its limits.
Lab — Manifest and identifier check for the thesis archive
# SHA-256 manifest for a synthetic thesis archive; the release check flags any file containing a raw rider id.
import hashlib
files = {"protocol.md": b"pre-registered protocol v3", "analysis.py": b"seed=7; epsilon grid", "results.csv": b"eps,mae\n0.1,10.1\n", "README.md": b"rerun: python3 analysis.py", "sample_rows.csv": b"rider_id,zone\nR-104233,12\n"}
for n, b in files.items():
flag = "BLOCK (contains rider_id)" if b"rider_id" in b else "ok"
print(f"{hashlib.sha256(b).hexdigest()[:16]} {n:16s} {flag}")
Run with python3 lab_archive.py. Verified output:
a52eebd60ecdcdf6 protocol.md ok
fec505cc4b189e5f analysis.py ok
56ae8db2fd66c425 results.csv ok
0859d3705f295926 README.md ok
59ddbf48bee52954 sample_rows.csv BLOCK (contains rider_id)
Worked example
Ines writes a bounded central claim, builds a five-file manifest with SHA-256 digests and catches a sample file with a rider identifier column, which she replaces before deposit.
Synthetic case. The archive files and the token are synthetic; GDPR Article 25 and EDPB Guidelines 4/2019 are real.
Errors and limits
A keyword check catches only identifiers it is told to look for; free text can still leak. Digests prove integrity, not correctness.
Exercises
- EX039 — Bounded claim. List the three bounds on Ines's central claim. Rubric: 3 = synthetic population, three planners, attacks tested;; 2 = lists two;; 1 = lists none;; 0 = none.
- EX040 — Generator not data. Why archive the generator and seed rather than the population? Rubric: 3 = it rebuilds the same population exactly and keeps the archive small;; 2 = mentions size;; 1 = archives everything;; 0 = none.
- EX041 — Blocked file. Which file did the check block, and why? Rubric: 3 = sample_rows.csv, because it contains a rider_id column;; 2 = names the file;; 1 = says none;; 0 = none.
- EX042 — Digests role. What does a SHA-256 manifest prove, and what not? Rubric: 3 = that files have not changed since listing; not that analyses are correct;; 2 = names one;; 1 = confuses them;; 0 = none.
- EX043 — Design scope. Why does data protection by design reach the research archive? Rubric: 3 = outputs can leak personal data just as systems can;; 2 = mentions outputs;; 1 = limits it to systems;; 0 = none.
- EX044 — Data statement. What should Ines's data statement explain? Rubric: 3 = contents, exclusions and how to request real-data access;; 2 = names one;; 1 = omits;; 0 = none.
Synthesis
Chapter 7 produces a bounded claim and a clean archive. Chapter 8 prepares the defense and publication.
Continue studying — chapter 07 of 08
← Chapter 06 (draft) · Course chapter index · Chapter 08 (draft) →