From c233be8e34e51bb4d99c392b777b36601515dc48 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 13:29:26 +0000 Subject: [PATCH 1/8] Migrate web book to Quarto Book and deploy with GitHub Actions --- .github/workflows/book.yml | 58 ++++++++ README.md | 17 ++- TRANSLATION_GUIDE.md | 2 +- book/.gitignore | 11 ++ book/_quarto.yml | 98 ++++++++++++++ book/index.qmd | 42 ++++++ book/prepare.py | 125 ++++++++++++++++++ book/styles-dark.scss | 20 +++ book/styles.scss | 124 +++++++++++++++++ .../_config.yml | 22 --- .../_toc.yml | 45 ------- .../landing-page.md | 43 ------ 12 files changed, 495 insertions(+), 112 deletions(-) create mode 100644 .github/workflows/book.yml create mode 100644 book/.gitignore create mode 100644 book/_quarto.yml create mode 100644 book/index.qmd create mode 100644 book/prepare.py create mode 100644 book/styles-dark.scss create mode 100644 book/styles.scss delete mode 100644 causal-inference-for-the-brave-and-true/_config.yml delete mode 100644 causal-inference-for-the-brave-and-true/_toc.yml delete mode 100644 causal-inference-for-the-brave-and-true/landing-page.md diff --git a/.github/workflows/book.yml b/.github/workflows/book.yml new file mode 100644 index 0000000..ca2b557 --- /dev/null +++ b/.github/workflows/book.yml @@ -0,0 +1,58 @@ +name: Book + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +permissions: + contents: write + +concurrency: + group: book-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + # 노트북은 실행하지 않고 저장된 출력을 그대로 렌더링하므로 jupyter만 있으면 됩니다. + - name: Install Jupyter + run: pip install jupyter + + - uses: quarto-dev/quarto-actions/setup@v2 + with: + version: 1.8.25 + + - name: Prepare book sources + run: python book/prepare.py + + - name: Render book + working-directory: book + run: quarto render --to html + + - name: Upload preview + if: github.event_name == 'pull_request' + uses: actions/upload-artifact@v4 + with: + name: book-preview + path: book/_book + retention-days: 7 + + - name: Deploy to GitHub Pages + if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: book/_book + publish_branch: gh-pages + force_orphan: true + commit_message: "Deploy book" diff --git a/README.md b/README.md index 9513920..4d8e32c 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ 안녕하세요. [가짜연구소](https://pseudo-lab.com/) Causal Inference 팀입니다.
-이 책은 Matheus Facure (Nubank Data Scientist)의 [Causal Inference for The Brave and True](https://matheusfacure.github.io/python-causality-handbook/landing-page.html)을 한국어로 번역한 자료입니다. 이 책은 인과추론에 대한 기본 개념과 Python 실습, 나아가 최신 사례까지 모두 다루고 있습니다. 인과추론에 대한 이론과 실습자료가 많지 않은 상황에서 이 책은 인과추론 처음 접하거나 인과추론에 대한 이해를 바탕으로 사례를 접하고 싶은 분 모두를 만족시킬 수 있는 책이라고 생각합니다. 한국에서 인과추론을 공부하시는 분들께 많은 도움이 되었으면 좋겠습니다. 해당 한국어 번역 자료는 [Jupyter Book](https://causalinferencelab.github.io/Causal-Inference-with-Python/landing-page.html)으로도 배포되어 있으니 많은 관심 부탁드립니다. +이 책은 Matheus Facure (Nubank Data Scientist)의 [Causal Inference for The Brave and True](https://matheusfacure.github.io/python-causality-handbook/landing-page.html)을 한국어로 번역한 자료입니다. 이 책은 인과추론에 대한 기본 개념과 Python 실습, 나아가 최신 사례까지 모두 다루고 있습니다. 인과추론에 대한 이론과 실습자료가 많지 않은 상황에서 이 책은 인과추론 처음 접하거나 인과추론에 대한 이해를 바탕으로 사례를 접하고 싶은 분 모두를 만족시킬 수 있는 책이라고 생각합니다. 한국에서 인과추론을 공부하시는 분들께 많은 도움이 되었으면 좋겠습니다. 한국어판은 [웹북](https://causalinferencelab.github.io/Causal-Inference-with-Python/)으로도 읽을 수 있습니다.
가짜연구소 Causal Inference 팀은 전문 번역가가 아닌, 데이터분석가/과학자/연구자로 구성 되어 있습니다. 따라서, 한국어 번역 과정에서 이상하거나 어색한 부분이 발생할 수 있어요. 해당 부분에 대한 여러분의 피드백을 부탁드립니다. 용어는 『실무로 통하는 인과추론 with 파이썬』(한빛미디어)과 맞췄고, 핵심 용어는 처음 나올 때 영어를 함께 적었습니다. @@ -77,3 +77,18 @@ | [Conformal Inference for Synthetic Control](https://github.com/CausalInferenceLab/Causal-Inference-with-Python/blob/main/causal-inference-for-the-brave-and-true/Conformal-Inference-for-Synthetic-Control.ipynb) | 2026-10 |
+ +## 웹북 빌드 + +웹북은 [Quarto](https://quarto.org/) Book으로 만들고, `main`에 머지되면 GitHub Actions(`.github/workflows/book.yml`)가 빌드해 GitHub Pages에 배포합니다. PR에서는 빌드만 확인하고, 결과물은 Actions의 `book-preview` 아티팩트로 내려받아 볼 수 있습니다. + +로컬에서 미리 보려면 Quarto를 설치한 뒤 다음을 실행하세요. 노트북은 다시 실행하지 않고 저장된 출력을 그대로 씁니다. + +```bash +pip install jupyter +python book/prepare.py +cd book && quarto preview +``` + +번역 원고는 `causal-inference-for-the-brave-and-true/`의 노트북입니다. `book/prepare.py`가 빌드할 때만 장 제목, 수식 표기, 접힌 코드, 옮긴이 주 상자를 책 형식에 맞게 바꾸므로 노트북은 원서와 같은 구조로 유지하면 됩니다. + diff --git a/TRANSLATION_GUIDE.md b/TRANSLATION_GUIDE.md index e0f2887..f15bc58 100644 --- a/TRANSLATION_GUIDE.md +++ b/TRANSLATION_GUIDE.md @@ -220,5 +220,5 @@ 1. 원문 저장소의 해당 노트북을 내려받아 코드 셀과 출력은 그대로 둡니다. 2. 마크다운 셀을 위 원칙대로 옮깁니다. 3. 수식, 이미지, 링크 개수가 원문과 같은지 확인합니다. -4. Jupyter Book으로 빌드해 렌더링을 확인합니다. +4. `python book/prepare.py && cd book && quarto preview`로 웹북 렌더링을 확인합니다. 새 노트북을 추가했다면 `book/prepare.py`의 장 제목 목록과 `book/_quarto.yml` 목차에도 넣어 주세요. 5. PR에는 원문 커밋과 바뀐 셀을 적어 주세요. diff --git a/book/.gitignore b/book/.gitignore new file mode 100644 index 0000000..6624fca --- /dev/null +++ b/book/.gitignore @@ -0,0 +1,11 @@ +# prepare.py가 만드는 빌드용 사본 +*.ipynb +*.py +!prepare.py +data/ +_book/ +.quarto/ +*_files/ + +/.quarto/ +**/*.quarto_ipynb diff --git a/book/_quarto.yml b/book/_quarto.yml new file mode 100644 index 0000000..ff6e220 --- /dev/null +++ b/book/_quarto.yml @@ -0,0 +1,98 @@ +project: + type: book + output-dir: _book + resources: + - data/img/** + +lang: ko + +execute: + enabled: false + +book: + title: "Python으로 하는 인과추론" + subtitle: "Causal Inference for The Brave and True 한국어판" + author: + - name: Matheus Facure + role: 지은이 + - name: 가짜연구소 인과추론팀 + role: 옮긴이 + site-url: https://causalinferencelab.github.io/Causal-Inference-with-Python/ + repo-url: https://github.com/CausalInferenceLab/Causal-Inference-with-Python + repo-subdir: causal-inference-for-the-brave-and-true + repo-actions: [issue] + cover-image: data/img/brave-and-true.png + favicon: data/img/brave-and-true.png + search: true + page-navigation: true + sidebar: + style: floating + collapse-level: 1 + page-footer: + left: "원서 © Matheus Facure · 한국어판 가짜연구소 인과추론팀" + right: + - icon: github + href: https://github.com/CausalInferenceLab/Causal-Inference-with-Python + chapters: + - index.qmd + - part: "1부 인과추론의 기초" + chapters: + - 01-Introduction-To-Causality.ipynb + - 02-Randomised-Experiments.ipynb + - 03-Stats-Review-The-Most-Dangerous-Equation.ipynb + - 04-Graphical-Causal-Models.ipynb + - 05-The-Unreasonable-Effectiveness-of-Linear-Regression.ipynb + - 06-Grouped-and-Dummy-Regression.ipynb + - 07-Beyond-Confounders.ipynb + - 08-Instrumental-Variables.ipynb + - 09-Non-Compliance-and-LATE.ipynb + - 10-Matching.ipynb + - 11-Propensity-Score.ipynb + - 12-Doubly-Robust-Estimation.ipynb + - 13-Difference-in-Differences.ipynb + - 14-Panel-Data-and-Fixed-Effects.ipynb + - 15-Synthetic-Control.ipynb + - 16-Regression-Discontinuity-Design.ipynb + - part: "2부 인과추론의 실무 응용" + chapters: + - 17-Predictive-Models-101.ipynb + - 18-Heterogeneous-Treatment-Effects-and-Personalization.ipynb + - 19-Evaluating-Causal-Models.ipynb + - 20-Plug-and-Play-Estimators.ipynb + - 21-Meta-Learners.ipynb + - 22-Debiased-Orthogonal-Machine-Learning.ipynb + - 23-Challenges-with-Effect-Heterogeneity-and-Nonlinearity.ipynb + - 24-The-Diff-in-Diff-Saga.ipynb + - 25-Synthetic-Diff-in-Diff.ipynb + appendices: + - Debiasing-with-Orthogonalization.ipynb + - Debiasing-with-Propensity-Score.ipynb + - When-Prediction-Fails.ipynb + - Prediction-Metrics-For-Causal-Models.ipynb + - Conformal-Inference-for-Synthetic-Control.ipynb + +crossref: + chapters: true + +format: + html: + theme: + light: [cosmo, styles.scss] + dark: [cosmo, styles.scss, styles-dark.scss] + respect-user-color-scheme: true + toc: true + toc-depth: 2 + toc-title: 이 장의 내용 + number-sections: true + number-depth: 1 + code-copy: true + code-overflow: wrap + code-tools: false + html-math-method: mathjax + df-print: default + link-external-newwindow: true + include-in-header: + - text: | + + + diff --git a/book/index.qmd b/book/index.qmd new file mode 100644 index 0000000..75ebe65 --- /dev/null +++ b/book/index.qmd @@ -0,0 +1,42 @@ +--- +aliases: + - landing-page.html +--- + +# 들어가며 {.unnumbered} + +가볍지만 엄밀하게 효과 추정과 민감도 분석을 배우는 책입니다. 모든 실습은 파이썬으로 하고, 찾을 수 있는 밈은 최대한 넣었습니다. + +**1부**에서는 인과추론의 핵심 개념과 모델을 다룹니다. 인과적 질문을 잠재적 결과 표기법으로 나타내는 방법, 인과 그래프, 편향이 무엇이고 어떻게 다루는지를 배웁니다. 여기 담긴 내용은 대부분 학계에서 자리를 잡은 것들로, 인과적 질문을 탐구할 때 기댈 수 있는 튼튼한 토대입니다. + +**2부**에서는 인과추론이 (주로 IT) 산업에서 최근 어떻게 발전하고 쓰이는지를 다룹니다. 1부가 평균 처치효과를 식별하는 데 집중한다면, 2부는 개인화와 CATE 모델을 이용한 이질적 효과 추정으로 넘어갑니다. 저자의 실무 경험에서 나온 내용이 많아 훨씬 실험적이고, 앞으로 바뀔 수도 있습니다. + +**부록**에는 본문을 보충하는 다섯 편의 글을 실었습니다. + +## 한국어판에 대하여 + +이 책은 [가짜연구소](https://pseudo-lab.com/) 인과추론팀이 원저자의 동의를 받아 옮겼습니다. 용어는 같은 저자의 책을 옮긴 『실무로 통하는 인과추론 with 파이썬』(한빛미디어)과 맞췄고, 번역 원칙과 용어표는 [번역 가이드](https://github.com/CausalInferenceLab/Causal-Inference-with-Python/blob/main/TRANSLATION_GUIDE.md)에 정리해 두었습니다. + +각 장은 원서의 주피터 노트북을 그대로 옮긴 것이라 코드와 출력이 원서와 같습니다. 노트북 파일은 [GitHub 저장소](https://github.com/CausalInferenceLab/Causal-Inference-with-Python/tree/main/causal-inference-for-the-brave-and-true)에서 내려받아 직접 실행해 볼 수 있습니다. 코드가 길어 접혀 있는 셀은 **코드**를 눌러 펼칠 수 있습니다. + +인과추론팀은 전문 번역가가 아니라 데이터 분석가, 데이터 과학자, 연구자로 이루어져 있습니다. 어색하거나 틀린 부분은 [이슈 페이지](https://github.com/CausalInferenceLab/Causal-Inference-with-Python/issues)에 알려 주세요. 관련 질문은 메인테이너 [신진수](https://github.com/jsshin2022)에게 부탁드립니다. 도움이 되었다면 [GitHub 스타](https://github.com/CausalInferenceLab/Causal-Inference-with-Python)로 응원해 주세요. + +한국어 번역에 흔쾌히 동의해 준 Matheus Facure와, 번역과 실습 자료를 함께 만든 인과추론팀 멤버들에게 감사드립니다. + +## 원저자의 감사의 말 + +이 시리즈 전체를 Joshua Angrist, Alberto Abadie, Christopher Walters의 훌륭한 계량경제학 강의에 바치는 헌사로 생각합니다. 1부의 아이디어는 대부분 이들이 미국경제학회(American Economic Association)에서 한 강의에서 가져왔습니다. 2020년이라는 힘든 해를 버틸 수 있었던 것도 이 강의 덕분이었습니다. + +- [Cross-Section Econometrics](https://www.aeaweb.org/conference/cont-ed/2017-webcasts) +- [Mastering Mostly Harmless Econometrics](https://www.aeaweb.org/conference/cont-ed/2020-webcasts) + +Angrist의 책들도 꼭 소개하고 싶습니다. 계량경제학, 그들 말로 'Metrics가 아주 유용할 뿐 아니라 무척 재미있다는 것을 이 책들에서 배웠습니다. + +- [Mostly Harmless Econometrics](https://www.mostlyharmlesseconometrics.com/) +- [Mastering 'Metrics](https://www.masteringmetrics.com/) + +마지막은 Miguel Hernan과 Jamie Robins의 책입니다. 가장 까다로운 인과적 질문에 답해야 했을 때 늘 믿고 기댄 동반자였습니다. + +- [Causal Inference: What If](https://miguelhernan.org/whatifbook) + +원서는 누구나 무료로 볼 수 있는 오픈소스 자료입니다. 원서가 도움이 되었다면 저자의 [Patreon](https://www.patreon.com/causal_inference_for_the_brave_and_true)을 후원하거나 [원서 저장소에 스타](https://github.com/matheusfacure/python-causality-handbook/stargazers)를 남겨 주세요. diff --git a/book/prepare.py b/book/prepare.py new file mode 100644 index 0000000..b27b2dd --- /dev/null +++ b/book/prepare.py @@ -0,0 +1,125 @@ +"""Quarto 빌드용 원고를 만든다. + +원본 노트북(causal-inference-for-the-brave-and-true/*.ipynb)은 원서와 같은 구조를 유지해야 하므로 +직접 고치지 않고, book/ 아래에 빌드 전용 사본을 만들어 다음만 바꾼다. + +- 장 제목: 원문 영어 H1을 지우고 한국어 장 제목을 front matter로 넣는다. +- 수식: 한 줄에 `$`만 있는 블록 수식을 `$$`로 바꾼다(Pandoc은 단일 `$` 블록을 수식으로 읽지 않는다). +- `hide-input` 태그: 코드를 접어 두는 Quarto 옵션(code-fold)으로 바꾼다. +- 대체 텍스트가 `img`뿐인 이미지: 그림 캡션으로 찍히지 않게 비운다. +- `{note}` 지시문과 `> 옮긴이:` 인용문: Quarto 콜아웃으로 바꾼다. + +실행: python book/prepare.py +""" +import json +import re +import shutil +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +SRC = ROOT / "causal-inference-for-the-brave-and-true" +OUT = ROOT / "book" + +CHAPTERS = { + "01-Introduction-To-Causality": "인과추론 소개", + "02-Randomised-Experiments": "무작위 실험", + "03-Stats-Review-The-Most-Dangerous-Equation": "통계 복습: 가장 위험한 수식", + "04-Graphical-Causal-Models": "그래프 인과 모델", + "05-The-Unreasonable-Effectiveness-of-Linear-Regression": "선형회귀의 터무니없는 효과", + "06-Grouped-and-Dummy-Regression": "그룹 회귀와 더미 회귀", + "07-Beyond-Confounders": "교란 요인을 넘어서", + "08-Instrumental-Variables": "도구변수", + "09-Non-Compliance-and-LATE": "불응과 LATE", + "10-Matching": "매칭", + "11-Propensity-Score": "성향점수", + "12-Doubly-Robust-Estimation": "이중 강건 추정", + "13-Difference-in-Differences": "이중차분법", + "14-Panel-Data-and-Fixed-Effects": "패널데이터와 고정효과", + "15-Synthetic-Control": "통제집단합성법", + "16-Regression-Discontinuity-Design": "회귀 불연속 설계", + "17-Predictive-Models-101": "예측 모델 101", + "18-Heterogeneous-Treatment-Effects-and-Personalization": "이질적 처치효과와 개인화", + "19-Evaluating-Causal-Models": "인과 모델 평가", + "20-Plug-and-Play-Estimators": "플러그 앤 플레이 추정량", + "21-Meta-Learners": "메타러너", + "22-Debiased-Orthogonal-Machine-Learning": "편향 제거/직교화 머신러닝", + "23-Challenges-with-Effect-Heterogeneity-and-Nonlinearity": "효과 이질성과 비선형성", + "24-The-Diff-in-Diff-Saga": "이중차분법 사가", + "25-Synthetic-Diff-in-Diff": "합성 이중차분법", + "Debiasing-with-Orthogonalization": "직교화로 편향 제거하기", + "Debiasing-with-Propensity-Score": "성향점수로 편향 제거하기", + "When-Prediction-Fails": "예측이 실패할 때", + "Prediction-Metrics-For-Causal-Models": "예측 지표가 인과 모델에 위험한 이유", + "Conformal-Inference-for-Synthetic-Control": "통제집단합성법의 컨포멀 추론", +} + + +def src_text(cell): + s = cell["source"] + return "".join(s) if isinstance(s, list) else s + + +def set_text(cell, text): + lines = text.split("\n") + cell["source"] = [line + "\n" for line in lines[:-1]] + [lines[-1]] + + +def fix_markdown(text): + # 대체 텍스트가 "img"뿐인 이미지는 캡션으로 찍히지 않게 비운다 + text = re.sub(r"!\[img\]\(", "![](", text) + # 한 줄짜리 `$` 블록 수식 → `$$` + text = re.sub(r"(?m)^[ \t]*\$[ \t]*$", "$$", text) + # MyST {note} → Quarto 콜아웃 + text = re.sub(r"```\{note\}\n(.*?)\n```", r"::: {.callout-note}\n\1\n:::", text, flags=re.S) + # 원문의 잘못된 note 펜스(```note)도 같은 콜아웃으로 + text = re.sub(r"```note\n(.*?)\n```", r"::: {.callout-note}\n\1\n:::", text, flags=re.S) + + # > 옮긴이: ... 인용문(여러 줄 포함) → 옮긴이 콜아웃 + def translator_note(m): + body = re.sub(r"(?m)^> ?", "", m.group(0)) + body = re.sub(r"^옮긴이:\s*", "", body.strip()) + return '::: {.callout-tip appearance="simple" title="옮긴이"}\n' + body + "\n:::" + + text = re.sub(r"(?m)^> 옮긴이:.*(?:\n>.*)*", translator_note, text) + return text + + +def prepare_notebook(key, title): + nb = json.loads((SRC / f"{key}.ipynb").read_text(encoding="utf-8")) + cells = nb["cells"] + for cell in cells: + if cell["cell_type"] == "markdown": + set_text(cell, fix_markdown(src_text(cell))) + elif cell["cell_type"] == "code": + tags = cell.get("metadata", {}).get("tags", []) + if "hide-input" in tags and src_text(cell).strip(): + set_text(cell, "#| code-fold: true\n" + src_text(cell)) + + # 원문 영어 H1을 지우고 한국어 제목을 front matter로 + for cell in cells: + if cell["cell_type"] == "markdown": + text = src_text(cell) + stripped = re.sub(r"\A\s*# [^\n]*\n?", "", text, count=1) + if stripped != text: + set_text(cell, stripped.lstrip("\n")) + break + front = {"cell_type": "raw", "metadata": {}, "source": [f'---\ntitle: "{title}"\n---']} + nb["cells"] = [front] + [c for c in cells if not (c["cell_type"] == "markdown" and not src_text(c).strip())] + (OUT / f"{key}.ipynb").write_text(json.dumps(nb, ensure_ascii=False), encoding="utf-8") + + +def main(): + for key, title in CHAPTERS.items(): + prepare_notebook(key, title) + # 이미지·데이터와 노트북이 import하는 보조 모듈 + data = OUT / "data" + if data.is_symlink() or data.exists(): + data.unlink() if data.is_symlink() else shutil.rmtree(data) + shutil.copytree(SRC / "data" / "img", data / "img") + for helper in SRC.glob("*.py"): + shutil.copy(helper, OUT / helper.name) + print(f"prepared {len(CHAPTERS)} notebooks into {OUT}") + + +if __name__ == "__main__": + main() diff --git a/book/styles-dark.scss b/book/styles-dark.scss new file mode 100644 index 0000000..a20b471 --- /dev/null +++ b/book/styles-dark.scss @@ -0,0 +1,20 @@ +/*-- scss:defaults --*/ +$body-color: #e6e3dc; +$body-bg: #1b1d21; +$primary: #e3a27a; +$link-color: #e3a27a; +$code-color: #e3a27a; +$code-bg: #25282d; +$border-color: #34373d; +$sidebar-bg: #202227; +$sidebar-fg: #b9b6ae; +$sidebar-hl: #e3a27a; +$toc-color: #e3a27a; +$footer-bg: #202227; + +/*-- scss:rules --*/ +// 그래프 출력은 흰 배경으로 그려졌으므로 다크 모드에서도 흰 바탕 유지 +.cell-output-display img { + background: #fff; + border-radius: 4px; +} diff --git a/book/styles.scss b/book/styles.scss new file mode 100644 index 0000000..1c89fa0 --- /dev/null +++ b/book/styles.scss @@ -0,0 +1,124 @@ +/*-- scss:defaults --*/ +$font-family-sans-serif: "Pretendard Variable", Pretendard, -apple-system, "Apple SD Gothic Neo", "Noto Sans KR", sans-serif; +$font-family-monospace: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace; +$headings-font-family: "Noto Serif KR", "Pretendard Variable", serif; +$font-size-root: 17px; +$line-height-base: 1.85; + +$body-color: #23272f; +$body-bg: #fdfcf9; +$primary: #8a3b12; // 표지 주황빛에 맞춘 차분한 갈색 +$link-color: #8a3b12; +$code-color: #8a3b12; +$code-bg: #f4f1ea; +$border-color: #e6e1d6; + +$sidebar-bg: #f7f4ee; +$sidebar-fg: #4a4f59; +$sidebar-hl: #8a3b12; +$toc-color: #8a3b12; +$footer-bg: #f7f4ee; + +/*-- scss:rules --*/ +body { + word-break: keep-all; + overflow-wrap: break-word; + letter-spacing: -0.005em; +} + +// 본문 폭을 책 판형처럼 +#quarto-content main.content { + max-width: 760px; +} + +h1, h2, h3, .title { + font-weight: 700; + letter-spacing: -0.02em; +} + +h1.title { + font-size: 2.1rem; + margin-bottom: 0.4rem; +} + +// 장 제목의 "13장" 번호 +.chapter-number { + color: $primary; + font-weight: 600; + margin-right: 0.35em; +} + +h2 { + margin-top: 2.6rem; + padding-bottom: 0.3rem; + border-bottom: 1px solid $border-color; +} + +p { + margin-bottom: 1.15rem; +} + +// 사이드바의 부 제목 +.sidebar-item-section > .sidebar-item-container .sidebar-item-text { + font-weight: 700; + color: $body-color; +} + +// 코드 셀과 출력 +div.sourceCode, pre.sourceCode { + border-radius: 6px; + border: 1px solid $border-color; +} + +.cell-output-display table { + font-size: 0.82rem; + font-variant-numeric: tabular-nums; + display: block; + overflow-x: auto; +} + +.cell-output-display img { + max-width: 100%; + height: auto; +} + +details.code-fold > summary { + color: $sidebar-fg; + font-size: 0.85rem; +} + +// 옮긴이 콜아웃 +.callout.callout-style-simple.callout-tip { + border-left-color: $primary; + background: lighten($code-bg, 1%); + font-size: 0.95rem; +} + +.callout-tip .callout-title-container { + font-weight: 700; +} + +// 표지(index) 영역 +.cover-hero { + display: flex; + gap: 2rem; + align-items: center; + margin: 1rem 0 2.5rem; +} + +.cover-hero img { + width: 220px; + border-radius: 6px; + box-shadow: 0 10px 30px rgba(60, 40, 20, 0.18); +} + +.cover-hero .cover-meta p { + margin-bottom: 0.4rem; +} + +@media (max-width: 640px) { + .cover-hero { + flex-direction: column; + align-items: flex-start; + } +} diff --git a/causal-inference-for-the-brave-and-true/_config.yml b/causal-inference-for-the-brave-and-true/_config.yml deleted file mode 100644 index d75385e..0000000 --- a/causal-inference-for-the-brave-and-true/_config.yml +++ /dev/null @@ -1,22 +0,0 @@ -# in _config.yml -title: "Python으로 하는 인과추론" -author: Jinsoo Shin - -latex: - latex_documents: - targetname: book.tex - -execute: - execute_notebooks: "off" - -repository: - url: https://github.com/CausalInferenceLab/Causal-Inference-with-Python - - -html: - use_issues_button: true - use_repository_button: true - - -exclude_patterns: [_build, .DS_Store, "**.ipynb_checkpoints"] - diff --git a/causal-inference-for-the-brave-and-true/_toc.yml b/causal-inference-for-the-brave-and-true/_toc.yml deleted file mode 100644 index ad705f7..0000000 --- a/causal-inference-for-the-brave-and-true/_toc.yml +++ /dev/null @@ -1,45 +0,0 @@ -format: jb-book -root: landing-page -parts: -- caption: 인과추론 Part I - chapters: - - file: 01-Introduction-To-Causality.ipynb - - file: 02-Randomised-Experiments.ipynb - - file: 03-Stats-Review-The-Most-Dangerous-Equation.ipynb - - file: 04-Graphical-Causal-Models.ipynb - - file: 05-The-Unreasonable-Effectiveness-of-Linear-Regression.ipynb - - file: 06-Grouped-and-Dummy-Regression.ipynb - - file: 07-Beyond-Confounders.ipynb - - file: 08-Instrumental-Variables.ipynb - - file: 09-Non-Compliance-and-LATE.ipynb - - file: 10-Matching.ipynb - - file: 11-Propensity-Score.ipynb - - file: 12-Doubly-Robust-Estimation.ipynb - - file: 13-Difference-in-Differences.ipynb - - file: 14-Panel-Data-and-Fixed-Effects.ipynb - - file: 15-Synthetic-Control.ipynb - - file: 16-Regression-Discontinuity-Design.ipynb -- caption: 인과추론 Part II - chapters: - - file: 17-Predictive-Models-101.ipynb - - file: 18-Heterogeneous-Treatment-Effects-and-Personalization.ipynb - - file: 19-Evaluating-Causal-Models.ipynb - - file: 20-Plug-and-Play-Estimators.ipynb - - file: 21-Meta-Learners.ipynb - - file: 22-Debiased-Orthogonal-Machine-Learning.ipynb - - file: 23-Challenges-with-Effect-Heterogeneity-and-Nonlinearity.ipynb - - file: 24-The-Diff-in-Diff-Saga.ipynb - - file: 25-Synthetic-Diff-in-Diff.ipynb -- caption: 부록 - chapters: - - file: Debiasing-with-Orthogonalization.ipynb - - file: Debiasing-with-Propensity-Score.ipynb - - file: When-Prediction-Fails.ipynb - - file: Prediction-Metrics-For-Causal-Models.ipynb - - file: Conformal-Inference-for-Synthetic-Control.ipynb -- caption: 기여하기 - chapters: - - url: https://github.com/CausalInferenceLab/Causal-Inference-with-Python/issues - title: 번역 오류 제보 - - url: https://www.patreon.com/causal_inference_for_the_brave_and_true - title: 원저자 후원 (Patreon) diff --git a/causal-inference-for-the-brave-and-true/landing-page.md b/causal-inference-for-the-brave-and-true/landing-page.md deleted file mode 100644 index f1aeec3..0000000 --- a/causal-inference-for-the-brave-and-true/landing-page.md +++ /dev/null @@ -1,43 +0,0 @@ -# Causal Inference for The Brave and True - -![img](./data/img/brave-and-true.png) - -안녕하세요. [가짜연구소](https://pseudo-lab.com/) 빌더 [신진수](https://www.linkedin.com/in/jinsoo-shin-436060162/)입니다. 가짜연구소 인과추론팀은 한국어 자료가 많지 않은 인과추론을 더 많은 분들이 쉽게 접할 수 있도록 이 책을 옮겼습니다. - -## 책 소개 - -이 책은 Matheus Facure(Nubank 데이터 과학자)의 [Causal Inference for The Brave and True](https://matheusfacure.github.io/python-causality-handbook/landing-page.html)를 한국어로 옮긴 것입니다. 저자는 이 책을 이렇게 소개합니다. - -> 가볍지만 엄밀하게 효과 추정과 민감도 분석을 배우는 책입니다. 모든 실습은 파이썬으로 하고, 찾을 수 있는 밈은 최대한 넣었습니다. -> -> Part I에서는 인과추론의 핵심 개념과 모델을 다룹니다. 인과적 질문을 잠재적 결과 표기법으로 나타내는 방법, 인과 그래프, 편향이 무엇이고 어떻게 다루는지를 배웁니다. 여기 담긴 내용은 대부분 학계에서 자리를 잡은 것들로, 책과 대학 강의, 온라인 강좌에서 찾은 자료를 엮은 것입니다. Part I은 인과적 질문을 탐구할 때 기댈 수 있는 튼튼하고 안전한 토대라고 생각하면 됩니다. -> -> Part II에서는 인과추론이 (주로 IT) 산업에서 최근 어떻게 발전하고 쓰이는지를 다룹니다. Part I이 주로 평균 처치효과를 식별하는 데 집중한다면, Part II는 개인화와 CATE 모델을 이용한 이질적 효과 추정으로 넘어갑니다. 이 부분은 대부분 저의 실무 경험에서 나온 것이라 아직 확립된 과학이라고 할 수는 없습니다. 훨씬 실험적이고 앞으로 바뀔 수도 있습니다. 저 역시 아직 배우는 중이니까요. - -용어는 같은 저자의 책을 옮긴 『실무로 통하는 인과추론 with 파이썬』(한빛미디어)과 맞췄습니다. 번역 원칙과 용어표는 저장소의 [번역 가이드](https://github.com/CausalInferenceLab/Causal-Inference-with-Python/blob/main/TRANSLATION_GUIDE.md)에 정리해 두었습니다. - -가짜연구소 인과추론팀은 전문 번역가가 아니라 데이터 분석가, 데이터 과학자, 연구자로 이루어져 있습니다. 어색하거나 틀린 부분이 보이면 언제든 알려 주세요. 도움이 되었다면 GitHub 스타로 응원해 주시면 큰 힘이 됩니다. - -한국어 번역에 흔쾌히 동의해 준 Matheus Facure와, 번역과 실습 자료를 함께 만든 인과추론팀 멤버들에게 감사드립니다. - -## 감사의 말 (원저자) - -> 이 시리즈 전체를 Joshua Angrist, Alberto Abadie, Christopher Walters의 훌륭한 계량경제학 강의에 바치는 헌사로 생각합니다. Part I의 아이디어는 대부분 이들이 미국경제학회(American Economic Association)에서 한 강의에서 가져왔습니다. 2020년이라는 힘든 해를 버틸 수 있었던 것도 이 강의 덕분이었습니다. - -* [Cross-Section Econometrics](https://www.aeaweb.org/conference/cont-ed/2017-webcasts) -* [Mastering Mostly Harmless Econometrics](https://www.aeaweb.org/conference/cont-ed/2020-webcasts) - -> Angrist의 책들도 꼭 소개하고 싶습니다. 계량경제학, 그들 말로 'Metrics가 아주 유용할 뿐 아니라 무척 재미있다는 것을 이 책들에서 배웠습니다. - -* [Mostly Harmless Econometrics](https://www.mostlyharmlesseconometrics.com/) -* [Mastering 'Metrics](https://www.masteringmetrics.com/) - -> 마지막은 Miguel Hernan과 Jamie Robins의 책입니다. 가장 까다로운 인과적 질문에 답해야 했을 때 늘 믿고 기댄 동반자였습니다. - -* [Causal Inference Book](https://www.hsph.harvard.edu/miguel-hernan/causal-inference-book/) - -## 기여하기 - -번역 오류나 어색한 문장은 [이슈 페이지](https://github.com/CausalInferenceLab/Causal-Inference-with-Python/issues)에 남겨 주세요. 관련 질문은 메인테이너 [신진수](https://github.com/jsshin2022)에게 부탁드립니다. - -원서는 누구나 무료로 볼 수 있는 오픈소스 자료입니다. 원서가 도움이 되었다면 저자의 [Patreon](https://www.patreon.com/causal_inference_for_the_brave_and_true)을 후원하거나 [원서 저장소에 스타](https://github.com/matheusfacure/python-causality-handbook/stargazers)를 남겨 주세요. From c75afa09c05ea167549e8ff3f4df5f7a18145bdc Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 13:46:15 +0000 Subject: [PATCH 2/8] Redesign book with Causal-Lab theme and rewrite preface --- book/_quarto.yml | 11 +- book/assets/causal-lab-logo.png | Bin 0 -> 85893 bytes book/assets/causal-lab-mark.png | Bin 0 -> 71362 bytes book/index.qmd | 67 +++++-- book/styles-dark.scss | 49 ++++-- book/styles.scss | 299 +++++++++++++++++++++++++------- 6 files changed, 332 insertions(+), 94 deletions(-) create mode 100644 book/assets/causal-lab-logo.png create mode 100644 book/assets/causal-lab-mark.png diff --git a/book/_quarto.yml b/book/_quarto.yml index ff6e220..75a78f4 100644 --- a/book/_quarto.yml +++ b/book/_quarto.yml @@ -3,6 +3,7 @@ project: output-dir: _book resources: - data/img/** + - assets/** lang: ko @@ -21,13 +22,13 @@ book: repo-url: https://github.com/CausalInferenceLab/Causal-Inference-with-Python repo-subdir: causal-inference-for-the-brave-and-true repo-actions: [issue] - cover-image: data/img/brave-and-true.png - favicon: data/img/brave-and-true.png + favicon: assets/causal-lab-mark.png search: true page-navigation: true sidebar: - style: floating - collapse-level: 1 + style: docked + logo: assets/causal-lab-mark.png + collapse-level: 2 page-footer: left: "원서 © Matheus Facure · 한국어판 가짜연구소 인과추론팀" right: @@ -95,4 +96,4 @@ format: - text: | - + diff --git a/book/assets/causal-lab-logo.png b/book/assets/causal-lab-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..384b7463ce635f1433c3e46bf8dd2b7d0717351c GIT binary patch literal 85893 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