# 論文の式どおりに実装しても、SAEは疎にならなかった

> Canonical: https://vxi.me/ja/posts/sae-crypto-factor-replication-lambda/
> Locale: ja-jp
> Published: 2026-11-01
> Updated: 2026-11-01
> Markdown: https://vxi.me/ja/posts/sae-crypto-factor-replication-lambda.md

<figure class="sae-mechanism-counterexample not-prose" lang="ja-jp">
  <picture>
    <source media="(prefers-reduced-motion: reduce) and (max-width: 640px)" srcset="/images/posts/sae-crypto-factor-replication-lambda/sae-mechanism-counterexample.mobile.still.ja-jp.svg" type="image/svg+xml">
    <source media="(prefers-reduced-motion: reduce)" srcset="/images/posts/sae-crypto-factor-replication-lambda/sae-mechanism-counterexample.still.ja-jp.svg" type="image/svg+xml">
    <source media="(max-width: 640px)" srcset="/images/posts/sae-crypto-factor-replication-lambda/sae-mechanism-counterexample.mobile.ja-jp.svg" type="image/svg+xml">
    <img src="/images/posts/sae-crypto-factor-replication-lambda/sae-mechanism-counterexample.ja-jp.svg" alt="SAEの機構検証図。学習と検証による設定選択の後も、L1勾配は再構成勾配の約1/390。SAEとDenseAEの結合重みコサイン類似度は0.999998、Hoyerは0.479対0.478。K=64、λ=30の校正ではHoyerは0.618を超えたが、MSEは上限0.664を超えた。結論は筆者側のBinance 150資産、2022〜2024パネルに限られる。" width="1200" height="700" loading="eager" fetchpriority="high" decoding="async" style="display:block;width:100%;height:auto">
  </picture>
  <figcaption>筆者側の縮小Binanceパネルで、SAEのスパース機構が実際に作動したかを検証する。一手再現の数値であり、論文著者の元パネルを判定するものではない。</figcaption>
</figure>

最初の対照モデルの学習が終わったので、SAEとDenseAE（λ=0）の重みを比較した。ここでは重みを共有しており、エンコーダーとデコーダーが同じパラメータを使う。その結合重みのコサイン類似度は0.999998だった。つまり、スパースペナルティありのモデルと、なしのモデルは、実質的に同じモデルだった。Hoyerスパース度（0〜1で、値が大きいほど疎）も0.479対0.478。5分割を集計した予測ICはどちらも+0.0073で、ポートフォリオ成績もほぼ重なった。

最初の比較でここにぶつかるとは思っていなかった。再現しようとした論文では、スパース性が全体の仕組みを動かすエンジンになっている。L1ペナルティによってコードが十分に疎になるからこそ、再構成値で選んだバスケット同士の相関が下がり、ボラティリティも低下する、という筋書きだ。スパース性がそもそも現れていないなら、その後の数字が似ていても論文の機構を検証したことにはならない。

この記事では再現の全過程を記録する。何が一致し、何が一致しなかったのか。そして何より、一致しなかった箇所について、証拠が原因をどこまで示しているのかを整理したい。

## 論文の主張と、その証拠レベル

HanとQu（ワシントン大学）の論文はICAIF '26に採択された。研究課題は明確だ。日次のクロスセクション収益率を単層のSparse Autoencoderに入力し、再構成値で資産を順位付けし、逆張りの五分位ポートフォリオを作る。そのとき、スパース性そのものによってリスクが下がるのかを調べている。

著者は主な結果を3段階に分けており、この区別は重要だ。

- **厳密に確認された結果：** 最初の748日でK=128、λ=0.1を事前選択した後、5つの確認foldすべてで、SAEバスケットのrank尺度ボラティリティは同じKのPCAより20〜26%低かった。
- **探索的な結果：** K=64ではボラティリティが32〜37%低下した（money尺度では20.0%対27.3%）。ただし選択期間が初期テストfoldと重複しているため、探索的な証拠にとどまる。機構の説明として、バスケット内の平均ペア相関が0.008で、PCAの0.039より低いと報告している。
- **著者自身が否定した結果：** SAEには最も単純な同日反転ベースラインを上回るSharpeの増分がなかった（money尺度で−2.48）。因子の同一性は乱数seedをまたいで再現せず（デコーダーのマッチングcosineは0.13、ランダム辞書参照は0.117）。またLedoit–Wolf最小分散overlayにより、naiveに対するSAEのボラティリティ優位の約73%が回収された。

著者はさらに3つの制約を自ら明記している。シグナルはt日の引けで作り、同じ引け値で約定するため「実運用では執行できない」。全期間でコストは計上されていない。暗号資産ユニバースの選定には全期間の情報を使っており、point-in-timeではない。もう一つ、重要な情報が公開されていない。2026-11-01時点で論文にもarXivページにもコードへのリンクがなく、433資産の正確なリストも公開されていなかった。したがって再現では印刷されたプロトコルを自分で実装するしかなく、パネルが異なるのは避けられない。ここから私の結論の範囲も決まる。検証しているのは主張の移植可能性であり、著者が自分のパネルで行った実験の正誤を裁定するものではない。

## 私の再現設定：まず差分を明記する

データにはBinance公開APIの現物USDT日足を使った。アカウントもAPIキーも不要だ。ユニバースの固定ルールは学習前に決めてある。取引中の519ペアから、2022〜2024年の期間にデータがある285ペアを抽出し、252日以上の観測がある245ペアを残した。その後、日次quote volumeの中央値で上位150資産を選び、リストとハッシュを学習前に保存した。日ごとの対象資産数は89〜150、平均119だった。

論文との差分は明示しておく。資産数は433ではなく150で、流動性の高いサブセットに限定した。期間は2019〜2024ではなく2022〜2024。資産リストは現在も取引されている銘柄から作っているため、サバイバーシップ・バイアスがある。論文は上場廃止資産も最後の気配値まで残している。サバイバーシップによる選別はこのパネルのボラティリティを体系的に低くする。しかも、この記事の中心的な比較対象はボラティリティだ。このバイアスの大きさは遡って推定できない。上場廃止銘柄は現在の取引リストに存在せず、ここから数えられないためだ。パネル処理は論文に合わせ、日次クロスセクションで1/99% winsorizeし、欠損は最大3日まで前方補完してからmaskし、clip付きinverse-normal rank変換を行った。選択期間は最初の500リターン日（学習450 / 検証50）。K∈{32,64,128} × λ∈{10⁻³,10⁻²,10⁻¹} × 学習率のグリッドから、検証再構成誤差だけで設定を選んだ。その後はexpanding walk-forwardを5 fold、各foldのシグナル日は119日。各foldの最終シグナル日は翌日リターンが必要なため除外し、評価日は合計590日となる。ポートフォリオは再構成順位による逆張り五分位、等ウェイト、各legのgross exposureは1。t+1リターンが欠損した場合は0として扱った。これらは論文と同じだ。

事前登録したゲートも2つある。停止条件は単純で、縮小ユニバースでボラティリティの方向が再現しなければ、non-replicationとして報告する。ユニバースを広げたり、符号が出るまでパラメータを調整したりしない。校正ゲートは、診断でλが機構に効いていないと分かった場合に限り、選択期間内で「スパース度の目標を満たし、再構成コストを抑える」λを1つ選び、追加armを実行できるというものだ。両条件を満たすλがなければ実行しない。テストセットを見てから基準を変えることも認めない。

## 最初の異常：このパネルではλが効いていない

まずハイパーパラメータ選択を見る。K=128では、検証再構成MSEはλを変えてもほぼ横ばいだ。λ=10⁻³で0.3374、10⁻²で0.3375、10⁻¹で0.3380。ルールに従って選ばれた厳密設定はK=128、λ=10⁻³だった。著者のパネルでは同じKが選ばれたが、λは最も強い0.1だった。同じ選択基準なのに、2つのパネルでペナルティ強度の選好が逆になった。再構成誤差だけで選ぶと、L1は再構成を悪化させる方向に働くため、最も弱いペナルティが体系的に有利になる。私が10⁻³を選んだのは、ルール上ほぼ必然だった。対して論文は、同じと説明するルールで最も強い0.1を選んでいる。この緊張関係は記録しておく価値がある。著者のパネルでは強いペナルティが本当に再構成を損なわなかったのか、それとも選択過程に未記載の部分があるのか。

勾配レベルでは、さらに直接的な測定がある。論文の探索設定であるλ=10⁻²では、L1項の重みに対する平均勾配の大きさは5.5×10⁻⁶、再構成項は2.1×10⁻³だった。ペナルティは主項の約1/390しかなく、同じ桁にない。別の診断（最初の500日で再学習し、第1 foldのウィンドウで評価）では、論文の探索設定10⁻²の100倍にあたるλ=1.0まで上げてストレステストを行った。それでもHoyerは0.474から0.514に上がっただけで、モデルは依然として疎とは言えない。

校正ゲートを通過するλはなかった。λ∈{0.3,1,3,10,30}のスキャン（このスキャンはK=64、選択期間の口径）では、Hoyerは0.483から0.619まで上昇して飽和した一方、検証MSEはDenseAEの0.554から0.918へ、66%増加した。私の基準は「DenseAEよりHoyerが0.15以上高く、MSEは1.2倍以内」。λ=30ではHoyer 0.619が0.618の閾値をわずかに超える（この口径のDenseAEは0.468で、0.15を足すと0.618）。しかしMSE 0.918は許容上限0.664の約1.4倍だ。事前登録ルールに従い、校正armは実行しなかった。ただし「ペナルティの量が足りない」だけでは説明しきれない。同じプロトコルで測ると、λ=30のペナルティ勾配はすでに再構成勾配の約7.7倍ある。量は十分なのに、Hoyerは0.62付近で飽和し、先に再構成が崩れる。このパネルでは論文の範囲内のλは不活性であり、その範囲を超えると別の上限にぶつかる。このデータでは、再構成品質を保ったままコードを大幅に疎にするのは難しいようだ。上限の具体的な原因は測定していないため、ここは未確定としておく。

同じ式、同じλグリッドなのに、論文のパネルではバスケット内相関を5分の1まで下げ、こちらではモデルを変えることさえできないのはなぜか。測定として確定しているのは、ペナルティ勾配と再構成勾配の相対スケールだ。そこから先は推論なので、境界を明記する。L1の相対強度はコードの典型的なスケールに依存し、そのスケールは資産数やクロスセクションの構造によって変わる。論文は2019〜2024年の433資産、私のパネルは2022〜2024年の流動性上位150資産だ。λ=0.1は彼らのスケールでは有効な用量でも、こちらでは実質的にプラセボのように働く可能性がある。もう一つ排除できない説明がある。未公開の実装詳細によって、実際のペナルティ効果が印刷式と異なる可能性だ。例えばミニバッチ学習、あるいはloss reductionの取り方。印刷式では、再構成項を資産数Nでsumするのかmeanするのか、L1項を隠れ次元Kでsumするのかmeanするのかが指定されていない。この2つの分母の組み合わせだけでも、実効ペナルティに数百倍の暗黙的なスケーリングが生じ得る。公式コードがない以上、これは可能性として残すしかなく、著者について結論を下す材料にはできない。

こうした推論に依存しない点もある。印刷式に忠実な標準実装では、論文のλを校正なしに別のパネルへ持ち込める定数として扱うことはできない。自分のデータにλ=0.1をそのまま適用し、「SAEの分散化効果」と報告する人は、実際には一度も作動していない機構を報告しているかもしれない。

## ボラティリティは方向だけ残り、機構は逆転した

5 fold集計（590日、money尺度）：

| 手法 | 年率ボラティリティ | Sharpe |
| --- | ---: | ---: |
| naive同日反転 | 31.39% | +1.69 |
| PCA K=64 | 29.54% | +1.75 |
| PCA K=128 | 30.39% | +1.32 |
| SAE K=64（λ=10⁻²） | 29.90% | +0.65 |
| SAE K=128（λ=10⁻³、選択） | 28.97% | +0.96 |
| DenseAE K=64（λ=0） | 29.96% | +0.65 |

SAE-128はPCA-128よりボラティリティが4.7%低い（fold別では−4.0、−4.2、+3.1、−3.0、−10.0で、5 fold中4 foldが論文と同じ方向）。ただし、論文の厳密結果−20〜26%の約5分の1にすぎない。統計的な補足も必要だ。fold別差分の平均は−3.6%（日次をpoolした−4.7%とは異なる。前者はfold平均、後者は日次をまとめた値）で、t値は約−1.7（n=5）。有意とは言えない。ここで言えるのは方向と規模までだ。K=64では方向すら再現しない。SAEのボラティリティはPCAより1.2%高かった。前節を踏まえれば不思議ではない。λ=10⁻³で選ばれた「SAE」はほぼdenseであり、PCAに対するわずかな優位はスパース性の成果というより、通常のautoencoder再構成の性質と考える方が自然だ。

foldごとの変動を確認するため、money尺度の年率ボラティリティを示す。

| 手法 | Fold 1 | Fold 2 | Fold 3 | Fold 4 | Fold 5 |
| --- | ---: | ---: | ---: | ---: | ---: |
| naive反転 | 22.12% | 31.31% | 32.00% | 31.37% | 37.93% |
| PCA K=64 | 21.71% | 30.42% | 27.16% | 26.53% | 39.22% |
| SAE K=64 | 20.16% | 30.32% | 30.54% | 30.56% | 35.91% |
| PCA K=128 | 21.65% | 30.88% | 29.05% | 29.51% | 38.26% |
| SAE K=128 | 20.78% | 29.58% | 29.95% | 28.61% | 34.42% |

機構面の結果はさらに明確だ。論文の定義に従い、rank尺度で直近60日のバスケット内平均ペア相関を計算した。SAE-64はロング0.0215、ショート0.0297。PCA-64は0.0201 / 0.0261。naive反転はさらに低く、0.0136 / 0.0148だった。論文の報告値はSAE 0.008、PCA 0.039。こちらのパネルでは順位が逆転している。raw return尺度で計算すると、すべての手法が0.56〜0.60に集まる（共通の市場因子が支配的）ため、ここでもSAEの優位は見えない。論文と方向が一致する小さな結果は一つだけある。SAEバスケットの個別資産ボラティリティはPCAよりわずかに高い（日次0.0478対0.0466）。つまり、SAEは「静かな資産」を選んでいたわけではない。ただし、選んだ資産の相関も低くなっていなかった。

| 手法 | ロングバスケット相関 | ショートバスケット相関 |
| --- | ---: | ---: |
| SAE K=64 | 0.0215 | 0.0297 |
| PCA K=64 | 0.0201 | 0.0261 |
| naive反転 | 0.0136 | 0.0148 |
| 論文報告 SAE / PCA | 0.008 / 0.039 | 0.010 / 0.044 |

論文の最初の主張に対する私の判定はこうだ。K=128では方向が部分的に現れたが、規模は再現しなかった。K=64と機構の主張は再現しなかった。これは著者自身のパネルの結果を反証するものではない。パネル、期間、実装が異なるからだ。ただし、この主張を校正なしで別パネルに移植できると考えるべきではないことは示している。

## 論文の結論のうち、再現できたものとできなかったもの

この論文で評価したい点の一つは、著者がリスク低下をtradable Alphaと同一視していないことだ。SAEにはSharpeの増分がなく、因子の同一性は乱数seed間で安定せず、ICも改善しなかったと明記している。また、同日引け約定が実行不可能であること、コストを計上していないこと、ユニバース選択がpoint-in-timeではないことも制約として記載している。私の再現でも、これら否定的な結果の方向は著者の報告と一致した。一方、スパース度の分離は再現せず、overlayは構築詳細が不足しているため明確に判定できない。

- **Sharpeの増分なし：** naive反転のmoney Sharpeは+1.69、SAE-64は+0.65、SAE-128は+0.96だった。予測力も改善しなかった。反転ICはSAE-64が+0.0073、PCA-64が+0.0146（論文は+0.016対+0.021で、順位は一致）。
- **因子の同一性はseedをまたいで再現しない：** 3つのseedペアをHungarian matchingしたところ、デコーダーcosineは0.217〜0.220、ランダム辞書参照は0.198（95パーセンタイル0.203）だった。ランダムを少し上回る程度で、共有された市場方向を拾っている可能性はあるが、「同じ因子群」と呼べるほどではない。論文は0.13対0.117。資産数が違うためランダム基準の幾何も変わり、規模は異なるが、結論は同じだ。
- **スパース度の分離は再現しない：** 論文のHoyerはSAE 0.497、DenseAE 0.303。こちらは0.479対0.478だった。差がどこから来るかは明確だ。SAE側の差は小さい（0.497対0.479）が、分離できなかった差の全体はdense baseline側にある（0.303対0.478）。原因も測定した。コードの完全なゼロ比率はSAE 47.7%、DenseAE 47.6%。このパネルではReLUコードがペナルティなしでもほぼ半分ゼロになる。denseモデルが構造上すでに「疎」なので、差が見えなくなる。これは前節の別の側面だ。著者のパネルにはスパース度の分離があるが、私のパネルにはない。

overlayについては明確な判定を出せないため、結果をそのまま記録する。事前登録版では、legごとにLedoit–Wolf最小分散ウェイトを計算し、raw return共分散、money尺度で評価した。overlay後のボラティリティは59.96%に上昇した（ウェイトが集中したため）。rank尺度で実装を変えると、ボラティリティは8.19（rank尺度であり、パーセントではない）となり、naiveの8.97と2つのSAE変種を下回った。論文はnaive五分位ポートフォリオに60日rolling LW共分散を適用したとしか説明しておらず、構築の詳細は固定していない。どちらが「著者の方法」なのかは判断できない。自分の構築を分解して調べたところ、各legは約28資産で、60日LW共分散の条件数中央値は約94。行列が病的だったわけではない。問題はウェイトだ。最小分散解が各legを約6つの実効保有銘柄に集中させ（最大単一銘柄ウェイトの中央値は27%）、59.96%は行列の特異性ではなくウェイト集中の結果だった。この項目はinconclusiveのままにする。再現側の構築詳細を確定できないためだ。

## 執行可能な時系列に変えると、リターンが先に消え、ボラティリティは変わらない

次の節は論文にはない、私自身の拡張だ。結論を著者に帰属させてはいけない。

論文の評価では、t日の引けで作ったシグナルを同じt日の引け値で約定させている。著者自身も実行不可能と注記している。私は同じバスケットを翌日引け約定（この設定で実際に執行できる最も早い時点）にずらし、turnoverに応じて10 / 25 bpsの様式的コストを加えた。日次turnoverは約3.1（ロング・ショート両legを合算したウェイトの日次絶対変化の合計。最大値は4で、ほぼ毎日全入れ替えに近い）。

| 手法 | 同日引け gross Sharpe | 翌日引け gross | 同日引け net 10 bps | 翌日引け net 25 bps |
| --- | ---: | ---: | ---: | ---: |
| SAE-128 | +0.98 | +0.05 | −2.98 | −10.07 |
| SAE-64 | +0.67 | +0.26 | −3.12 | −9.34 |
| naive反転 | +1.71 | −0.10 | −1.86 | −9.62 |

注：Arm Dは保存済みバスケットを589日で再計算した（5 fold集計より1日少ない）。そのため、同日引けSharpeは集計表とわずかに異なる。例えばSAE-128は+0.98対+0.96。この差はその1日だけに由来する。

約定を1日遅らせると、3手法すべてのgross Sharpeはほぼゼロになる。日次反転の収益は、シグナル形成直後の最初の1日にあるため、これは意外ではない。10 bpsを加えると全てマイナスに転じ、25 bpsでは大幅なマイナスとなる。市場慣行について一つ補足する。暗号資産市場は24時間365日取引され、引けの板寄せはない。「日足の引け」はある時点のスナップショットにすぎないため、同日引け約定にコストを加えた列の方が、実際に執行できる近似に近い（実際の遅延とスリッページは別途差し引く必要がある）。翌日引けは株式市場の保守的な前提を持ち込んだもので、執行ギャップの上限を測るのであって、暗号資産市場の通常動作ではない。タイミングやコストを変えてもボラティリティはほとんど動かず、28〜31%にとどまる。コストは滑らかな負担だが、タイミング変更は反転プレミアムそのものを取り去る。どちらもリスク量は変えない。

著者はこの戦略が取引可能だとは主張していない。この節で数値化したのは、論文の免責文が実務上どれほど大きいかだ。「シグナルの証拠」と「取引可能な結論」の間には、執行前提の一式がある。同日引け約定を前提にSharpeを報告する日次クロスセクションモデルは、強い主張をする前にこの検査を通すべきだ。

## 今後MLファクター論文を読むとき、最初に実行するチェック

今回の再現から得たのは、結論そのものより長く使えるチェックリストだった。順番も固定した。

1. **アブレーション同一性チェック：** 主張する機構を無効にする（ここではλ=0）。重み、機構統計量（ここではHoyer）、下流指標を比較する。区別できなければ、効果量を論じる前に「機構が作動しなかった」と報告する。最初にこのチェックをしていれば、長い遠回りをかなり省けたはずだ。
2. **最も単純なベースライン：** naive同日反転は2つのパネルのどちらでも、最も高いかそれに近いSharpeを得た。複雑なモデルはまずこれに勝ってから次へ進む。
3. **教科書的overlay：** 共分散overlayだけで優位の大半を回収できるなら、モデルの増分は残差にすぎない。今回はきれいに再現できなかったが、このチェック自体は外せない。
4. **seed安定性：** seedを変えて再学習し、因子をmatchingし、ランダム参照と比べる。この検査に通らないなら、「因子を発見した」とは「この実行でいくつかの方向が出た」という意味にとどまる。

冒頭の0.999998に戻ろう。これは今回の再現で最も情報量の大きい数字だったと思う。論文の式、パラメータ、評価プロトコルは一字一句コピーできる。機構が実際に作動するかどうかは紙面には書かれていない。自分のパネルで測るしかない。ボラティリティが4分の1下がろうと、4.7%下がろうと、スパース性が確認されるまでは再構成モデルの数字にすぎない。

**再現範囲と資料：** 本文の結論は、縮小ユニバース（流動性上位150資産、2022〜2024年、サバイバーシップ・バイアスあり）と、印刷式に基づく自作実装（NumPy、有限差分による勾配検証済み）に限られる。著者の433資産、2019〜2024年パネルの結果を確認も反証もしていない。データはBinanceの公開日足で、本文のルールに従って再構築できる。執筆時点で著者の公式コードは公開されていなかった。論文の数値は著者報告として区別している。この記事は再現方法と証拠の境界を扱うもので、投資助言ではない。

再現コード、固定した資産リスト（ハッシュ付き）、fold別結果、判定記録は公開している。資料にはSHA256SUMSが含まれ、各ファイルを個別に検証できる。

<a class="gh-repo-pill" href="https://github.com/vxime/sae-crypto-factor-replication" target="_blank" rel="noopener"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg><span>vxime/sae-crypto-factor-replication</span></a>

この再現をより広いクオンツ研究の流れに位置付けるなら、[クオンツファクターの有効性をどう検証するか](/posts/quant-factor-validation-bucket-spread-rank-ic/)と[マルチファクターモデルのウェイトを安全に調整する方法](/posts/adaptive-factor-weighting-regime-shadow-drift/)も参照してほしい。前者はランキングの証拠が成立するかを扱い、後者はその証拠をモデルに取り込んだ後のウェイト変更をどう制御するかを扱う。

## Verification context

- Level: first-party
- Verified: 2026-11-01T00:00:00.000Z
- Environment: Python 3.12 / NumPy再実装（有限差分による勾配検証に合格）
- Environment: Binance現物USDT日足、公開API（APIキー不要）
- Environment: 2022-01-01〜2024-12-31の流動性上位150資産を固定
- Environment: 5分割のexpanding walk-forward / 評価日590日
- Evidence mode: mixed
- Public repository: https://github.com/vxime/sae-crypto-factor-replication
- Evidence commit: c93188255f57c0ca17d53d9b8f028314672e5dd0
- Evidence receipt: https://vxi.me/evidence/sae-crypto-factor-replication-lambda.json
