はじめに
統計は人類にはまだ早い。
しかしながら、内部統制評価や会計監査では統計学を背景にしたルールが定められていますので、そのため、このブログでは監査で用いられる統計的サンプリングのお気持ちを説明しようと思います。
(1)著者は統計学の専門家ではなくデータサイエンティスト(統計を使う側)の人間です。また、監査から離れて4年経っています。あまり自信がないです。コメントやディスカッション大歓迎です。
(2)ここの記載やプログラムをそのまま実務に用いないでください(責任はとれません)。
(3)専門用語は一般的な言い回しに多少置き換えていますので、特に記述式の試験勉強をしている方はご注意ください。
また、この記事は会計アドベントカレンダー14日目に投稿させていただいています。
adventar.org
Google Colabratoryで動かせるPythonのサンプルコードを提供しています。条件をいろいろ変えて実験してみてください。
この記事はAICPAの"Audit sampling", May 1, 2017; "Audit Guide" (AAG-SAM)の2017年版[1]を元に作成しています。 egrove.olemiss.edu
そのため少し古いかもしれません。(最新のものはお高いです)。本記事では、AAG-SAMの内容を説明しているサブセクションのタイトルに【AAG-SAM】をつけ、本文中では"AAG-SAM \$項番号"で参照します。
目次
※大変長い記事となっています。
- はじめに
- 目次
- 1. 統計的サンプリングとは
- 2. 仮説検定について
- 3. 内部統制の運用評価における統計的サンプリング(AAG-SAMの説明)と諸問題
- 4. 詳細テストにおける統計的サンプリング(AAG-SAMの説明)と諸問題
- 4.1. 【AAG-SAM】方法1: 金額単位抽出における詳細テストのサンプルサイズ【修正予定】
- 4.2. 金額単位抽出法の帰無仮説の前提の問題【修正予定】
- 4.3 【AAG-SAM】方法2: Classical Variables Sampling
- 4.4 Classical Variables Samplingの前提の問題
- 4.5 【AAG-SAM】監査リスクモデル
- 4.6 サンプリングではなくAI等による全件調査を採用する場合
- 4.7 【AAG-SAM】虚偽表示の上限(上限虚偽表示額)の推定
- 4.8 【AAG-SAM】部分虚偽表示(Tainting)がある場合
- 4.9 ベイズモデルによる虚偽表示額の上限推定
- 4.10 金額単位抽出を活かした虚偽表示額の推定
- 私の考える最強の統計的サンプリング
- まとめ
- 参考文献
1. 統計的サンプリングとは
企業は多くの取引を行いますが、監査は限られたリソースで行う必要があるため、サンプリング(試査)が採用されています。このサンプリングの目的はサンプリングしたレコードを検証して、母集団に関する結論を推測(予測)することです。
監査において統計的サンプリングは主に以下の2つの場面で用いられます。
- 内部統制の運用評価
- 会計監査の実証手続(詳細テスト)
以下では、母集団はN件からなる有限母集団を考えます。サンプルの件数をn件とします。運用評価手続の場合は、監査対象となる内部統制の運用期間中のすべての統制活動、詳細テストの場合は監査対象となる項目のすべてです。ただし、運用評価手続についてはある状況を与えた時に起こりうる統制活動の結果という意味で無限母集団を考える場合もあります。
1.1. 内部統制の運用評価
Aさんが紙で入手した売上伝票を元に、エクセルに転記しているとしましょう。Aさんは当然ミスしてしまう可能性があるため、内部統制として、担当者の転記が正確であるかをBさんがチェックしています。内部統制の運用評価では、Bさんのチェックが有効であるかを評価します。AさんがミスをしてBさんが見落とした場合を内部統制の「逸脱」といいます。このチェックは売上計上額の正確性につながります。売上計上額の正確性のように財務情報の適切性に関する主張(つまり、監査の対象)を「アサーション」と呼びます。
Bさんのチェック作業は年間1000回あるとします。これを全て確認するのは大変なので、例えば、25件サンプリングして確認します。25件の中の逸脱の数から、母集団全体(1000回)の逸脱率が許容できる程度か否かを予測します。この予測結果によって、内部統制が有効であるかを結論づけます。J-SOXやSOX適用の場合、重要な不備は報告することになります。その際には、母集団全体(1000回)の逸脱率そのものを予測して金額的な影響を算定して評価する場合があります。
ちなみに、推測の対象とする逸脱率は、取引ごとの転記作業の間違いやすさ(固有リスク)と正確性のチェック漏れの起きやすさ(統制リスク)を区別しません。どちらに起因しているかを考えず、これらの確率の積を対象にします。また、ひとつのアサーションに複数の統制活動がある場合であっても、結果としてそのアサーションに関してエラーがあるかを対象にします。 一方、統制活動が不確実性を伴って自動化されている場合(AIを利用など)、統制リスクの一部を対象にする可能性も考えられます。例えば、AIのOCRを使った統制活動の失敗率をインプットの特徴の関数として予測しておくことが考えられます。この場合、統制リスクの残りの構成要素や固有リスクを別に評価する必要があります。
キーワード(噛み砕いた説明です)
内部統制の逸脱: 整備された内部統制が正しく運用されなかったケース
アサーション(監査要点): 財務諸表の情報を構成する会計事象で監査の目的になるもの。売上100万円が計上されている場合には、「その売上が実在すること」(実在性)と「金額が100万であること」(正確性)が主なアサーションとなります。
1.2. 監査人による会計監査における詳細テスト
売掛金の金額の正確性を対象に監査するとします。(ここでのアサーションは売掛金の金額の正確性です)。売掛金の金額は売上伝票(紙)の金額が根拠になっています。期末の売掛金が20億円あり、それが200項目から構成されていたとしましょう。200項目すべてを確認するのは大変なので、そのうち35件を確認します。35件のエラーの数から、母集団全体(200項目)の虚偽表示額が許容できる程度か否かを予測します。この予測結果によって、重要な虚偽表示があるかを結論づけます。もし、サンプルの中に虚偽表示が見つかった場合には、母集団全体の虚偽表示額を推定(予測)します。 このように直接根拠資料を確かめる監査手続を詳細テストと呼びます。
内部統制監査と財務諸表監査は、一体で行われることになっています。内部統制が有効であるかの評価結果を考慮して、監査人は監査の範囲を柔軟に決めます。 2つの監査はそれぞれ目的があるものの、依存関係にあります。
キーワード(噛み砕いた説明です)
詳細テスト(Test of Details): アサーションを構成する項目について、その根拠資料やデータを直接検証する監査手続。一方で、データ分析等によって間接的に検証する手法を分析的実証手続(substantive analytical procedures)と呼び、これらを合わせて実証手続と呼びます。
2. 仮説検定について
2.1. 仮説検定は背理法による意思決定
内部統制の運用評価では、n=25件の中の逸脱数から、母集団全体(N=1000回)の逸脱率が許容できる程度か否かを予測します。詳細テストでは35件のエラーの数から、母集団全体(200項目)の虚偽表示額が許容できる程度か否かを予測します。これらは統計的仮説検定という方法によって行います。 仮説検定とはどういう手法でしょうか?
例えば、仲のいい友達と、じゃんけんを10回して、全敗したとしましょう。そんなとき、どう思いますか?
「なぜ?」「そんなに私は運が悪いのか」「友人は小細工をしているのではないか」などなど、いろいろ考えたくなります。「ふつうだったら5勝5敗、運が悪くても3勝くらいはするだろう。それが0勝なんておかしい」と。これが仮説検定の考え方です。
仮説検定では、まず「ふつうだったら、5勝5敗、運が悪くても3勝くらいはするだろう。」という予測をシミュレートします。「ふつうだったら」という仮定を帰無仮説と呼びます。帰無仮説が成り立つ世界ならどうなるかをコンピューターでシミュレーションしてみましょう。
「10回のジャンケン」を10000回シミュレーションして、50%の確率で勝ち50%で負ける場合の勝ち回数の分布を作成してみます。
win_counts = np.random.binomial(n=10, p = 0.5, size=10000) plt.figure(figsize=(10, 6)) sns.histplot(win_counts, bins=30)

では、今回の結果「全敗」はどうでしょうか。「全敗」の観測度数は図の赤枠の部分に相当します。10000回中、16回で0.16%です。あまりに小さい確率ですので何か細工があると疑いたくなります。 これを帰無仮説を棄却と表現します。「ふつうだったら(帰無仮説に基けば)、5勝5敗、運が悪くても3勝くらいはするだろう。(図のような分布で、3〜7勝くらいに落ち着くことが多い)。それに対して、今回の観測は0勝とあまりにも希少すぎる。これはふつうではない(帰無仮説はおかしいので棄却する)」というロジックです。
が無理数を示すときに敢えて有理数と仮定して矛盾を示すロジック(背理法)と似ていますね。
帰無仮説を棄却して、代わりに採択する仮説を対立仮説といいます。ここでは「友人が小細工していて友人の勝率が高くなっている」です。
キーワード
帰無仮説(null hypothesis): 背理法で主張をするために敢えて仮定される仮説。帰無仮説に基づく分布を帰無分布(null distribution)と呼びます。
対立仮説(alternative hypothesis): 帰無仮説が成り立たない場合に、採択(accept)される仮説。帰無仮説と対立仮説は排反でなければなりません。
2.2. 仮説検定の設計
では、帰無仮説に基づくとおかしいと判断するのは具体的に帰無仮説で何%を切るときでしょうか。例えば、ある人のルールでは帰無仮説に基づくと5%未満の希少な観測の場合には棄却する、別の人のルールでは10%未満といったようにいろいろなルールがあります。ここからは、このルールを測定する話です。
あなたは審判で友人とのじゃんけんに小細工がないかチェックしたいとします。友人は他の人と10回じゃんけんをして、8勝2敗という好成績を残しました。実は友人は「相手の動作や表情筋の動きを観察して次の手を予測していた」とし、真実の勝率が70%だったとします。

8勝2敗という観測は、帰無仮説(勝率50%)の分布で観測できる確率は16%です。 ここで、何%までを帰無仮説でも説明がつく範囲とみなすか、何%の場合に帰無仮説を棄却するかが問題となります。 例えば、自然科学や社会科学では一般的に5%(両側のため片側は2.5%)が使われています。この閾値を有意水準と呼んでおり、この閾値未満の確率になるような差がある場合を有意差があると呼んでいます。
今回の観測は帰無仮説に基けば16%の範囲なので、有意水準を5%にすると、有意な差はありません。 この場合の結論は、帰無仮説を採択と表現されますが、帰無仮説の内容が正しいと解釈することには問題があります。
ところで、真実は友人の勝率は高くなっていました。それにもかかわらず帰無仮説を棄却しませんでした。これは真実を知った上で本当は棄却すべきところを棄却できなかったというエラーです。偽陰性(false negative)や第2種の過誤と呼ばれています。 逆に、真実を知った上で棄却してはいけないところを棄却してしまったというエラーは、偽陽性(false positive)や第1種の過誤と呼ばれています。 これらは、2.1.で説明した実際の仮説検定の手続の中ではなく、仮説検定の枠組みに対してどれくらい棄却するか等を測定するときに使われます。
評価対象の仮説検定の枠組みに対して、以下の測定指標があります。
(1) 帰無仮説に基づいて棄却する割合を有意水準(または危険率)とよび で表現します。その逆
を信頼度と呼びます。監査サンプリングでは有意水準や危険率よりも信頼度のほうをよく使います。
(2) 対立仮説が真であると仮定して、対立仮説の分布からみたとき、閾値を超えず採択できなかった割合を で表現します。逆に、採択できた割合を検出力と呼びます。
が検出力になります。
よりも検出力のほうをよく使います。

用語がたくさんあってややこしいですね。ちなみに、AAG-SAM $1.28では、 と
を逆に説明して書いており、さらにややこしくなります。何度も読み直したのですが、やっぱり逆のようです。。。また来月読み直してみます。
逆だとすると、帰無仮説を「逸脱が存在しない」、対立仮説を「逸脱が存在する」としてテストを設計していると解釈しているように読めます。つまり、帰無仮説を棄却しないことをもって、有効と意思決定しています。検出力を90%にしているため、「仮にエラーがあるなら90%の確率で棄却できるはず。それが棄却されなかったので問題ない。」という意思決定になります。
全部逆に定義しているだけで、数学的には実質同じ操作ですし、「逸脱の検出」という言葉通りの解釈としてはこちらの方が自然かもしれませんが、統計の使い方としては不自然です。
このブログでは統計学の通り を使います。監査サンプリングに関する文献ではAAG-SAMに則って逆にしている場合がある(
の文字を逆に当てている場合もある)ため、注意してください。
キーワード
有意(statistically significant):観測の結果、帰無仮説を棄却できる状態。有意かどうかはその効果の大きさ(逸脱がどれくらい少ないか)については何も情報を与えないことに注意してください。
有意水準(level of significance):帰無仮説を棄却する水準で です。危険率とも呼びます。
偽陽性(false positive):帰無仮説が真であるのに、誤って棄却してしまうこと。第1種の過誤(type 1 error)とも呼びます。
信頼度(confidence): で、保守性の尺度という意味で信頼度と呼ばれています。信頼係数ともいいます。
偽陰性(false negative):対立仮説が真であるのに、誤って棄却できないこと。第2種の過誤(type 2 error)とも呼びます。
検出力(power): で、対立仮説を仮定したときに、正しく棄却できる確率。
臨界値(critical value):検定したい対象がこの値を超えたら棄却するという意思決定の境界値。正確には検定したい対象を検定統計量に変換して比較する閾値です(本ブログでは変換前に使っています。)。
3. 内部統制の運用評価における統計的サンプリング(AAG-SAMの説明)と諸問題
ここでは内部統制の運用評価を前提に、統計的サンプリングの説明を行います。内部統制の運用評価では、「内部統制の逸脱率が許容できる水準よりも低い水準にあるか」を調べることが目的です。許容できる水準を許容逸脱率と呼びます。帰無仮説として、「内部統制の逸脱率が許容逸脱率以上」である世界を考えます。この許容できる水準を許容逸脱率と呼び、例えば、9%とします。帰無仮説に基づいて25件のサンプリングを10000回試行すると、逸脱件数の分布は次のような図のようになります。
内部統制を実施した証跡を25件確認し、その結果、逸脱は0件でした。帰無仮説に基づくと、これが観測できる確率は図の赤枠部分の度数に対応し約9.4%です。10%未満のため帰無仮説を棄却し、許容逸脱率よりも小さいと結論づけることができます。
3.1. 【AAG-SAM】25件の背景
では、このサンプルサイズ(25件)はどのように決まっているのでしょうか。統計的サンプリングにおける仮説検定の設計では信頼度を重視しています。信頼度は保守性の尺度であるため、監査の見落としを防ぐために重要となります。
一方で、検出力は真の逸脱率が許容逸脱率より小さかった場合に、許容逸脱率と変わらないと結論づけてしまう割合のためここでは考慮されていません。なぜなら、仮にそうであっても、実証手続でカバーできるからだそうです。(AAG-SAM $3.39に詳細テストを増やせば問題ないと書いてあり、財務諸表監査との一体監査を前提としていることがわかります。でも内部統制監査だけの報告ってありますよね)。
検出力を考えない代わりに、想定する観測と信頼度条件を満たす中で、サンプルサイズをできるだけ小さく設定しています。
想定する観測として、どのような観測を前提にしたいでしょうか。一番良いストーリーはn件調査して逸脱が0件だったときに、帰無仮説が棄却できることです。許容逸脱率:q=9%、信頼度: 90%と設定してこのようなサンプルサイズを計算してみましょう。
帰無仮説に基づいて逸脱がないレコードをn件を観測する確率は です。これが
よりも小さいと棄却できます。
すなわち、
となります。変形すると
ですので、
と
を代入して、これを満たす最小のnは25件となります。
分布をシミュレーションして計算することもできます(上記は予想逸脱数が0の場合で、予想逸脱数が0でない場合は解析的に解けずシミュレーションによることとなります)。
nを減らすほど有意水準 が単調増加していくことを前提に、
で棄却できる条件を満たせる限りnを減らしていき、満たせなくなった場合のnに1増やしたものとして、最小のサンプルサイズを計算できます。
tolerable_rate = 0.09 expected_deviation = 0 confidence = 0.9 n = 1000 while binom.cdf(k=expected_deviation, n=n, p=tolerable_rate) < (1 - confidence): n = n - 1 print(n + 1)
ちなみに、なぜ母集団のサイズが100件でも100万件でも25件で良いのかもやもやする方もいらっしゃると思いますが、比率について推測しているからと考えると納得できるかもしれません。
この(25件、信頼度10%、許容逸脱率9%)条件について、実は、このうち(25件、信頼度10%)は内部統制実施基準[4]に記載されています。そして、AAG-SAM $3.42でも内部統制に依拠するには90-95%の信頼度が採用されるだろうと記載しています。

一方で、許容逸脱率については直接記載がありません。内部統制実施基準[4]では信頼度10%で少なくとも25件と記載しているので、逆算すると許容逸脱率9%を前提にしていることになります。(「少なくとも」というのは予想逸脱率が0%の場合と解釈しています。)AICPAやPCAOBの基準では許容逸脱率(あるいは上記のようなサンプルサイズと信頼度の組み合わせ)への言及はありませんでした。ただAAG-SAM Table 3-1では1%, 5%, 10%を掲載しており、この範囲が想定されていると解釈することはできます。ちなみに、Durney et al., (2013)[5]によると(日本以外だと思いますが)法人によっては9%でないところもあるようです。ヒアリングした中での最大は10%だそうです。
信頼度90%ということは、10回やったら期待値1回は見落とすレベルです。これを多いと思うか少ないと思うか。しかし、実務的に資料を揃えてもらってテストするとなると25件は限界に近いのではないかと思います。逆に監査で見落としてしまうリスクが高くなるという実務的な制限も考えて決めていかないといけません。
キーワード
許容逸脱率(Tolerable rate of deviation): 内部統制で許容される逸脱率で、これを帰無仮説の逸脱率にして帰無分布をつくり、実際に観測した逸脱数からこの逸脱率より小さいと主張します。
予想逸脱率(予想逸脱数)(Expected population deviation rate) : サンプルサイズを小さくするために、この逸脱率(逸脱数)が観測されたとしても帰無仮説が棄却できるとする値です。
実際の逸脱率(逸脱数): サンプルを検証して実際に観測した逸脱率です。帰無仮説に基づきこの逸脱率(逸脱数)が稀であれば棄却できます。
3.2. 帰無仮説の前提
サンプルサイズ25件(信頼度0.9、許容逸脱率9%)の前提では、
(1) 逸脱がある請求書か逸脱がない請求書かのどちらかが観測でき(ベルヌーイ試行)、(2)各試行は独立で、(3)取り出した請求書は元に戻す復元単純無作為抽出を考えています。
(1) 逸脱があるかないかの2択なので、"軽微な"逸脱は想定していません。端数がずれているといった少しでも誤りがあれば逸脱とみなします。
(2) 各試行は独立というのは請求書を順番に取り出す試行をするとき、すべての試行が互いに影響しないことです。
例えば、「すべての子会社の請求書を母集団にして、子会社Aの資料を取り寄せたので、子会社Aから3つくらいサンプリングしておく」というのは、3つのサンプリングの試行が独立ではありません。「十分にシャッフルされていない請求書の束から10枚おきに取得する」といった場合でも、直前に取り出した請求書とダンボールに入れられたタイミングが近い請求書が次に取り出される傾向があるため独立とはいえません。
(3) 復元単純無作為抽出を仮定しています。
取り出した請求書は元に戻す復元単純無作為抽出については、実際には取り出した請求書は元に戻さない非復元単純無作為抽出を行なっているため、乖離があります。しかし、非復元単純無作為抽出を前提にしても、復元単純無作為抽出を前提にした場合とほとんど同じ(少し保守的)であるため問題ないとされています。母集団のサイズNが取り出す標本サイズnに対して大きくなればNがN-nになる影響は小さくなることが想像できます。一方で、教育的な理由を除けば、計算パワーに困らない現代では超幾何分布で計算すれば良いと思います。
次のコードで有限母集団のサイズNがN=800の場合は25件ですが、小さくすると変わってきます。Nが小さい場合は2項分布は超幾何分布の良い近似にはなりません。N=54(週次程度)の場合はn=23件、12(月次程度)の場合は11件です。ちなみに、AAG-SAM \$3.63 Table 3-5に母集団サイズが小さい場合のサンプルサイズが載っていますが、これよりだいぶ少ないです。
tolerable_rate = 0.09 expected_deviation = 0 confidence = 0.9 N_all = 800 n = N_all # initial while hypergeom.cdf(k=expected_deviation, M=N_all, N=n, n=math.floor(tolerable_rate*N_all)) < (1 - confidence): n = n - 1 print(n + 1)
キーワード
ベルヌーイ試行(Bernoulli trial): 結果が成功か失敗かの2値のみをとる試行。
復元単純無作為抽出(sampling with replacement): サンプルを取り出した後、母集団に戻してから次のサンプルを取り出す方法。各試行は独立になります。
非復元単純無作為抽出(sampling without replacement): サンプルを取り出した後、母集団に戻さずに次のサンプルを取り出す方法。各試行は独立ではなくなります。
超幾何分布(hypergeometric distribution): 非復元抽出における成功回数の確率分布。母集団サイズが小さい場合、2項分布よりも正確です。
2項分布(binomial distribution): 復元抽出における成功回数の確率分布。各試行が独立なベルヌーイ試行をn回繰り返したときの成功回数の分布です。
3.3. 25件の検出力
「予想逸脱数0件/25件でテストしてたまたま逸脱が1件見つかってしまいました。」というケースです。あるあるですよね。"あるある"の理由は25件の設計における検出力にあります。例えば、真の逸脱率は3%として、予想逸脱数0件で逸脱率9%の帰無仮説を棄却するためにサンプルサイズを25件としました。仮に、対立仮説が真である前提で、逸脱率3%に基づいて25件抽出し、逸脱が1件以上ある確率を計算してみると52%もあることがわかります。
print( sum(binom.rvs(n=25, p=0.03, size=10000)>0)/10000 ) #> 0.5269
このように、25件の設計では、「本当は十分小さい逸脱率なのに、棄却できない」というケース(偽陰性)はかなり多く発生することがわかります。この例では検出力は47%と小さいです。というのも、内部統制の運用評価におけるサンプルサイズ決定では検出力(あるいは )を無視しており、予想逸脱率に基いで、ぎりぎり棄却できる最小のサンプルサイズとして選んでいるからです。攻めの監査です。
ではどうすればよいでしょうか。そもそも、25件の前提は予想逸脱数0件の場合でした。予想逸脱数を1件にしてみましょう。 するとサンプルサイズは42件となります。逸脱率3%で42件抽出した場合に逸脱が2以上ある確率を計算してみると35.8%に減り、検出力は64.2%へと改善しました。
print( sum(binom.rvs(n=42, p=0.03, size=10000)>1)/10000 ) #> 0.3644
このように、事前にある程度の逸脱が想定できる場合には、予想逸脱数を0にしないことが重要です(事前に想定するのが難しいとは思いますが...)。
一方で、予め欲しい検出力を満たすようにサンプルサイズを決めることもできます。検出力は対立仮説に基づいて計算するため、対立仮説における逸脱率を何%として計算するか決める必要があります。先ほどの例のとおり3%として計算してみます。
from scipy.stats import norm def required_sample_size(p0, p1, alpha=0.05, power=0.8): z_alpha = norm.ppf(1 - alpha) z_beta = norm.ppf(power) n = ((z_alpha * np.sqrt(p0 * (1 - p0)) + z_beta * np.sqrt(p1 * (1 - p1))) / abs(p1 - p0)) ** 2 return int(np.ceil(n)) required_sample_size(tolerable_rate, true_deviation_rate, alpha = 1-confidence, power = 0.8) #> 73
この場合、検出力80%を満たすようにするには72件必要になります。
3.4. 逸脱率の状況依存性
内部統制の逸脱率は検証対象とする評価範囲における平均的な逸脱率として評価されます。例えば、内部統制の担当年数が10年のAさんが4〜9月の200件を担当し、10月以降の200件は新人のBさんが担当した場合、内部統制の逸脱率はAさんとBさんが半々で作業した場合として評価されます。内部統制だけの評価としてはそれで良いと思うのですが、問題は、財務諸表監査において内部統制に依拠するかの意思決定で生じます。
内部統制の運用評価ではAさんとBさんが半々で行っていたため逸脱率が許容逸脱率よりも十分低かったものの、期末の残高を構成する取引に対してはほとんどBさんが担当していて、逸脱率が内部統制で評価した逸脱率よりも増加しているという状況になります。このとき、内部統制の評価を根拠に依拠できると意思決定をして、実証手続を緩めると(詳細テストを少なくすると)、結果的に監査リスクが大きくなってしまいます。
他に考えられる例としては、複数の事業拠点の統制活動を一括で評価している場合です。事業拠点によって逸脱率が異なり、それらが会計残高を構成する割合は変化しやすいです。
これらの例以外にも、多様な取引や業務フロー、統制活動を行う人の状況など、さまざまな要因に逸脱率が依存していて、内部統制評価時と会計監査時で乖離してしまう可能性があります。
対策1: 母集団の層化
構成比の変化に対してロバストにするには母集団をグループに分割して部分母集団にしておくことです。グループは似たようなものを集めるのではなく、可能であれば逸脱率に影響する変数が似ているようなものを集めることが望ましいです。
「統計的サンプリングでは母集団が均質でなければならない」という言説を見かけます。ここでいう均質は変数の値のばらつきが小さいということと解釈しています。変数が逸脱率に影響するかわからなかったとしても、すべての変数を観測しグルーピングすることができれば、対策になります。
母集団の層化は、サンプルの観測から母集団の推定したいものを推定する(点推定や区間推定)のであれば、母集団の推定量の分散を小さくできるといったメリットがあるものの、内部統制の運用評価では基本的には仮説検定を行うのみなのでそのようなメリットはありません。むしろ、均質化は状況依存性への対策として重要なのではないかと考えています。
対策2: 状況依存性を特定し、リスクをモデリングする
逸脱率に関係する変数を使用して、変数別の逸脱率(条件付き逸脱率)の予測を行います。例えば、経験豊富なAさんの統制活動を経た取引の重要な虚偽表示率は5%、Bさんの場合は10%、のように変数によって変化する逸脱率に対して機械学習モデルをフィッティングします。
期末の残高を構成する取引に対して逸脱率を予測することで、状況依存性の変化に対応できます。このアプローチは多くのサンプルを必要とするため現状の業務では難しいかもしれませんが、AI等による統制活動の自動化の暁には現実的になります。
例外的な事象について
経済状況の変化が大きいと、想定外の業務フローが発生し、統制活動が適切に行えないケースが出てきてしまうと思います。このような例外的な事象は数多く考えられるものの、ひとつひとつが顕在化する可能性は小さいという厄介な性質があります。そして、たいていの場合、1年間という評価期間は、例外的な事象の発生確率を推定するのに十分ではありません。例外的な状況に依存して逸脱率が大きく変化するものの、その変数を観測できていない(外挿)問題になります。
このようなケースでは例外を含まない前提における内部統制の評価に依拠することはできません。企業の状況をよく観察したり、観測できる変数の分布外検知(異常検知)を行ったりすることで、例外的な事象が生じていないかに注意する必要があります。
3.5. 帰無仮説を棄却できない場合の取り扱い
「予想逸脱数0の前提でサンプルサイズ25件を設定してサンプルを検証した結果、棄却できませんでした。予想逸脱率を修正して再度検定していいですか?」という問題を扱います。ここではあくまでサンプルサイズ上の扱いに限定します。
監査サンプリングでは逸脱が見つかった場合に、サンプリング範囲を拡大できることがAAG-SAMに記載されています。一方で、同じ検定を複数回行いどれかが棄却できた場合に全体で棄却できたとするのは多重比較と言われています。逸脱が見つかった時にサンプリング範囲を拡大することは、多重比較になるのでしょうか。
結論としては、多重比較になるが、影響はそこまで大きくないです。基本的に当初に計画した棄却条件を変える場合、信頼度は保証されません。棄却条件の変更を認める計画にした場合にどの程度の信頼度になるかはシミュレーションできます。
信頼度は帰無仮説に基づいて計算します。例えば、許容逸脱率9%として25件のサンプルの逸脱数0件だった場合に棄却する計画では50000回中4721回棄却されました。つまりで信頼度は
となります。
# 帰無仮説に基づき25件中0件を観測する確率 tolerable_rate = 0.09 n = 50000 judge_list=[] for itr in range(n): error_num = binom.rvs(n=25, p=tolerable_rate) judge_list.append(error_num==0) print(sum(judge_list)/n) #> 0.9442
では、25件サンプリングして、最初の10件を見たところ虚偽表示が見つかってしまったので、再度25件サンプリングし直した場合を考えます。それを認める計画でシミュレーションすると、信頼度は
となります。当初の計画である信頼度90%より低下してしまいます。
# 最初の10件で棄却できなかった場合に25件取り直す方法で、帰無仮説で最終的に棄却できる確率 tolerable_rate = 0.09 n = 50000 judge_list=[] for itr in range(n): error_num = binom.rvs(n=10, p=tolerable_rate) if error_num == 0: error_num_add = binom.rvs(n=15, p=tolerable_rate) judge_list.append(error_num + error_num_add==0) else: error_num_ret = binom.rvs(n=25, p=tolerable_rate) judge_list.append(error_num_ret==0) sum(judge_list)/n #> 0.15272
AAG-SAM $3.84 には、予想した逸脱を超える虚偽表示が出てしまった場合には、サンプルサイズを倍に増やせば、保証水準を同等がそれに近い水準で結論をくだせるだろうという記載があります。 25件を前提に、この計画の信頼度を計算すると88.32%です。そのため、90%に近い水準というのは嘘ではないです。
# 25件で棄却できなかった場合に50件に拡大して合計1件であれば棄却する方法で、帰無仮説で最終的に棄却できる確率 tolerable_rate = 0.09 n = 50000 judge_list=[] for itr in range(n): error_num = binom.rvs(n=25, p=tolerable_rate) error_num_add = binom.rvs(n=50-25, p=tolerable_rate) judge_list.append((error_num==0)|(error_num + error_num_add ==1)) sum(judge_list)/n #> 0.11468
ちなみに、詳細テストについては$4.95に件数拡大の旨、$4.97に2倍という経験則の記載があります。
信頼度90%は何かに規定されているわけでもなく、そこまで下がっていないので良いと考える人もいるかもしれません。初めから信頼度88%の前提でルールを作っておけば問題ないです。
しかし、保証水準として決めている以上、やはり90%は確保したいですよね。であれば、初めから予想逸脱率がある程度あってもいいようにサンプルサイズを設定すべきなのですが、25件程度で済むならそうしたいですよね。
そのような場合、あらかじめ多段階のテストを行なう計画を最終的に が0.1になるように設計できます。例えば初めに26件サンプリングしてもし1件逸脱が見つかったら合計60件になるように追加サンプリングする計画であれば、信頼度は90%を満足できます。
今回は2項分布の確率質量関数を使って正確に計算します。計算すると90.49%となります。
# 26件で棄却できなかった場合に60件に拡大して合計1件であれば棄却する方法で、帰無仮説で最終的に棄却できる確率 tolerable_rate = 0.09 n = 26 p_k0_n1 = binom.pmf(k = 0, n = 26, p = tolerable_rate) p_k1_n1 = binom.pmf(k = 1, n = 26, p = tolerable_rate) p_k0_n2 = binom.pmf(k = 0, n = 34, p = tolerable_rate) print("危険率 = ",p_k0_n1 + p_k1_n1 * p_k0_n2) #> 0.095 print("信頼度 = ",1-(p_k0_n1 + p_k1_n1 * p_k0_n2))#> 0.904
一般的な計画を作成する手法として、α消費関数法が知られています。例えば、O'Brien Flemingの方法では、全体でn件でテストするときに、そのうちの割合qに相当するqn件で中間テストを実施する場合、中間テスト時点で消費する危険率は となります。
は累積標準正規分布、
はその片側
点です。しかし、この手法は保守的になってしまうのと、内部統制の逸脱数は離散的に増えていくので、初めからシミュレーションする方が良いと思います。
ちなみに、このような多段階計画はAAG-SAM "Appendix B Sequential Sampling for Tests of Controls"で説明されており、AAG-SAM $3.64では計画時にsequential sampling planを選択することも想定されています。
多段階をもっと一般化すると、1件ずつサンプルを確認して条件を満たしたら停止するような計画を作ることができます。このような計画は逐次計画といいます。統計的サンプリングの逐次計画は今年のSIGFINで発表がありました[6]。監査サンプリングも進化し続けています。
3.6. 【AAG-SAM】帰無仮説を棄却できない場合の逸脱率の推定
内部統制の運用評価において、帰無仮説を棄却できない場合、AAG-SAM $3.85 によると内部統制の欠陥と評価し、その重要性を判断します。その際に、手元のサンプルの観測から逸脱率の推定を行います。
今、手元に25件のサンプルがあり、2件の逸脱があったとします。許容逸脱率9%、信頼度90%で計画していたため、帰無仮説を棄却できませんでした。このとき、25件の観測から逸脱率を2/25=8%と推定できます。これは、標本比率で点推定(真ん中の予測)を行なったものです。一方で、監査では母比率のとりうる範囲(特に上限)を知りたいと考えます。母比率のとりうる範囲は区間推定によって予測できます。
区間推定は「仮にその区間を帰無仮説の棄却域としたとき、新たにデータを取った時に信頼度 で棄却されない区間」として計算することができ、その精度をカバー率で測定すると、(分布等の仮定が正しければ)信頼度
の確率で母比率をカバーできます。監査における逸脱率の推測では信頼区間の上側が欲しいため、上側片側として推定します。
AAG-SAM $3.77とTable A-3, A-4では母比率の区間推定を用いて上限を推測しています。n件の観測のうちx件の逸脱があった時のClopper-Pearsonの片側上側信頼限界は で計算できます。例えば25件中2件の逸脱があったとき90%片側上側信頼限界は19%となります。この逸脱率上限19%をもとに、金額的重要性の評価や監査リスクのコントロールを行うことができます。
confidence = 0.9 n = 25 deviation_num=2 beta.ppf(confidence,deviation_num+1,n - deviation_num) #> 0.199
キーワード
点推定(point estimation): 母集団のパラメータ(逸脱率など)を1つの値として推定すること。標本比率による推定は点推定の一例です。真ん中の予測とごまかしていますが、真ん中の定義にはいろいろあり、例えば推定量の期待値が真の値になる(バイアスがない)という普遍性があります。
信頼区間(confidence interval): 「仮にその区間を帰無仮説の棄却域としたとき、新たにデータを取った時に信頼度 で棄却されない区間」として計算することができ、その精度をカバー率で測定すると、(分布等の仮定が正しければ)信頼度
の確率で母比率をカバーします。サンプルを観測して計算した信頼区間は推定値(くじ引きを引いた結果の一つ)なので、その区間が真の値を含んでいるか否かは何も言えないことに注意してください。また、分布等の仮定が正しければというのも、一つの推定量に対しても信頼区間の作り方にはいろいろあり、それらは分布を仮定する場合が多く、仮定と現実が乖離していると現実ではカバー率を満たしません。
片側上側信頼限界(one-sided upper confidence bound): 信頼区間の上側のことで、推定上限逸脱率の算定に使います。
3.7 逸脱率のベイズ統計モデリング
これはAAG-SAMに記載がない方法ですが、ベイズ統計モデルによる推定を紹介します。
ベイズ統計モデルでは、予測したい対象である逸脱率について、事前情報を元に初期の分布(事前分布)を設定し、それを観測したデータに当てはまるように更新します。更新した後の分布を事後分布よび、これに基づいて予測を行うことができます。事後分布は事前分布に(観測したデータの)尤度を乗じることで計算できます。
仮に、前期までの内部統制で合計60件のうち3件の逸脱があったとします。事前分布を のベータ分布と仮定します。すると2項尤度(25件中2件の逸脱)で更新すると
となります。これは以下のようにまとめることができて
規格化定数を確率が1になるように調整することでパラメータを更新したベータ分布で表現できます。
事後分布から片側上限信用限界を計算すると9.29%となります。
beta(3+2, 57+25-2).ppf(0.90) #> 0.0929
ベイズモデルの良い点として、他の変数や人間の知識との統合が容易に行える点があります。例えば、サンプルに金額、取引タイプ: a, b, c、作業担当者: A, B, C、作業時間: 午前, 午後のような特徴量があったときに、特徴量と逸脱率の関係を反映した階層ベータ分布としてモデルを作成できます。なお、先ほどの例では事後分布がベータ分布になることが分かっていたため、パラメータの更新のみで計算できましたが、階層化等をするとシミュレーション計算が必要になります。
(取引タイプ:b, 担当者:B, 作業時間:午前, 金額:平均値)の場合の90%上限は18.84%のように、条件別に計算できます。
キーワード
事前分布(prior distribution): データを観測する前の、パラメータに関する初期の信念や知識を表す確率分布。
事後分布(posterior distribution): 観測データによって更新された、パラメータに関する確率分布。事前分布に尤度を乗じて計算されます。
尤度(likelihood): あるパラメータの値の下で、観測データが得られる確率(または確率密度)。
信用区間(credible interval): ベイズ統計における区間推定。事後分布においてパラメータ含まれる区間を予測したもの。頻度論の信頼区間とは解釈が異なります。
規格化定数(normalization constant): 確率分布の総和(または積分)を1にするための定数。
4. 詳細テストにおける統計的サンプリング(AAG-SAMの説明)と諸問題
AAG-SAMでは詳細テストのサンプルサイズの計算として、金額単位抽出とClassical variables samplingの2つの方法を紹介しています。
4.1. 【AAG-SAM】方法1: 金額単位抽出における詳細テストのサンプルサイズ【修正予定】
<追記 2026/08/07> こちらの訂正部分は金額単位抽出の設計を考慮できていませんでした。修正したブログを作成予定です。
詳細テストでは内部統制の運用評価の"25件"のように、日本の公式の例示がないため、AAG-SAM $6.20に記載されている数値例を元に説明します。母集団金額(20億)のうち5%の金額が許容できる虚偽表示額(6000万)とします。つまり金額の許容虚偽表示率が5%です。信頼度90%が要求されており、予想虚偽表示率が1%としましょう。詳細テスト(金額単位抽出)では、金額と虚偽表示率は独立という仮定を置いて計算しています。
レコードiの虚偽表示額が とかけると仮定します。
は帳簿価額、
は虚偽表示である割合で0または1をとるものとします(精緻にモデリングする際には0〜1にします。)。
虚偽表示額の合計は ですが金額と虚偽表示であるかは独立なので期待値の積にできます。すなわち
平均簿価は母集団のすべてのレコードで観測して計算すればよく、結局 、つまり虚偽表示の件数がわかれば良いことになります。
帰無仮説を「虚偽表示が5%以上である」とします。また、母集団全体の虚偽表示が5%の時、サンプルn件に含まれる虚偽表示の数が 5n%件のポアソン分布になると仮定します。(運用評価と同様に2項分布を用いた方が解釈しやすいのですが、ここではAAG-SAMに基づきポアソン分布とします。)
すると予想虚偽表示率1%の通り虚偽表示が見つかった場合に、棄却できるようにするには、この分布の10%(1 - 90%)に収まれば良いので、
これを満たす最小のnは47です。
# 予想虚偽表示数が0の場合 tolerable_misstatement_rate = 0.05 expected_error_num = 0 confidence = 0.90 n = 100 while np.exp(-tolerable_misstatement_rate * n) < (1 - confidence): n = n - 1 print(n + 1)
AAG-SAM Table 4-5の再現
AAG-SAM Table 4-5では予想虚偽表示数ではなく予想虚偽表示率として算定されています。予想虚偽表示率 0.05で計算すると47件とでてきます。 しかし、AAG-SAM Table 4-5の同条件のサンプルサイズは69件です。
n = 200 tolerable_misstatement_rate = 0.05 expected_error_rate = 0.01 confidence = 0.90 while (poisson.cdf(k=expected_error_rate*n, mu=tolerable_misstatement_rate * n) <= (1 - confidence)) & (n>0): n = n - 1 print(n + 1)
これは、AAG-SAM Table 4-5では予想虚偽表示数を0件に丸めずに計算しているためです。ポアソン分布は離散分布なので、予想虚偽表示率で与えられても予想虚偽表示数は切り捨てられて整数に丸められて計算されます。一方で、AAG-SAM Table 4-5は連続のポアソン分布に拡張して計算しています。実際に詳細テストの虚偽表示数が整数でないことはないため、AAG-SAM Table 4-5は過度に保守的です。
AAG-SAM Table 4-5の計算方法はStewart, T.R. (2012)[2]に記載されており、どうやらVBAで計算されているようです。当時のVBA(Excel)の関数にポアソン分布の累積分布関数がなかったため、(連続な分布である)ガンマ分布に変換(拡張)することで、ガンマ分布の関数を用いて計算しているようです。(このせいでサンプルサイズが増えています。そう、Excelのせいで。)
ポアソン分布は事象の発生回数、ガンマ分布は事象がn回発生するまでの時間の分布です。同じ事象の観測を別の観点から見ているもので、定義から、ガンマ分布で n回の事象が時間 t以降に発生する確率(上側累積) = ポアソン分布で時間 t内に n回未満の事象が発生する確率(下側累積)がいえます。式で書くと次のようになります。
この関係を用いて、敢えてガンマ分布に変換して計算すると、69件になること、さらに予想逸脱数を整数に丸めることで47件になることが確認できます。
tolerable_misstatement_rate = 0.05 expected_error_rate = 0.01 confidence = 0.90 n = 200 while (gamma.cdf(tolerable_misstatement_rate * n,a=1+expected_error_rate*n,scale=1) > (confidence)) & (n>0): n = n - 1 print(n + 1)
予想逸脱数を整数に丸める場合
while (gamma.cdf(tolerable_misstatement_rate * n,a=1+expected_error_rate*n,scale=1) > (confidence)) & (n>0): n = n - 1
AAG-SAM $6.20〜$6.31では、金額単位抽出のためのサンプルサイズ計算はAAG-SAM Table 4-5かAAG-SAM Appendix Table C-2を使用するように記載されていますが、これらは端数処理の違いのみです。AAG-SAM Appendix Table C-2では、ポアソン分布の を信頼度係数と呼び、小数点以下2位で切り捨てています。
$ 6.28の例では、許容逸脱率3%、予想逸脱率0.6%、信頼度95%の場合に、信頼度係数が4.62となり、サンプルサイズが155件になります。
# 6.28の再現 def floor_to_digits(value, digits): """小数点以下{digits}位で{value}を切り捨て""" multiplier = 10 ** digits return math.floor(value * multiplier) / multiplier tolerable_misstatement_rate = 0.03 expected_error_rate = 0.006 confidence = 0.95 n = 200 while (gamma.cdf(floor_to_digits(tolerable_misstatement_rate * n,2),a=1+(expected_error_rate*n),scale=1) > (confidence)) & (n>0): n = n - 1 print(n + 1)
キーワード
金額単位抽出(Monetary Unit Sampling, MUS): 母集団の各金額単位に等しい抽出確率を与える方法。金額が大きい項目ほど抽出されやすくなります。確率比重抽出の一種です。
信頼度係数(reliability factor): 監査専門用語です。ポアソン分布の期待値パラメータ μのこと。AAG-SAMでは表を用いた計算のために端数処理されて使用されます。統計用語の信頼係数(confidence coefficient)とは別物です。
4.2. 金額単位抽出法の帰無仮説の前提の問題【修正予定】
(1) ポアソン分布の仮定
これについては、ある程度サンプルサイズが大きければポアソン分布は2項分布の良い近似になるため、そこまで影響はないです。
(2) 帳簿価額と虚偽表示率が独立
(3) 部分虚偽表示
AAG-SAM $4.29では金額単位抽出では標本抽出時に変動性を考慮していると記載されていますが、棄却域の計算には反映されていません。金額と虚偽表示率は無関係だとは考えづらいです。なぜなら虚偽表示(重要な虚偽表示リスク)は金額によって発生確率が異なるからです。また、実際には金額単位抽出をしているため、金額重みづけで抽出していることになりますので、サンプルは金額が多いバイアスがあった上での虚偽表示率を観測していることになります。この前提も帰無仮説では反映されていません。
部分虚偽表示が考慮されていません。もし、あるレコードが虚偽表示である場合、レコードの金額の100%が虚偽表示額になると仮定しています。実際には少しずれていただけのケースもあるので基本的には保守的になります。ただし、例えば、見積系の負債科目だと実際にはもっと大きかったというケースがあるので必ずしも保守的というわけではありません。
(4) 金額の不確実性の考慮について検討中です。
(AAG-SAMでは、元に期待値の積に分解してから上側信頼上限に持っていっていますが、本来初めから推定量の上側信頼上限を議論すべきです。この場合、信頼上限の積には分解できません。また、正規分布を仮定できないとブートストラップくらいしか方法がなくなってしまいます。)
4.3 【AAG-SAM】方法2: Classical Variables Sampling
詳細テストのサンプルサイズを計算する2つ目の方法は、Classical Variables Samplingと呼ばれています。
この方法では虚偽表示が多数生じるケースを想定しており、分散が既知の場合の正規分布の差の片側検定を行います。信頼度と検出力と母分散からサンプルサイズを決定します。前期までの情報等で母分散を決めないと使えず、あまり実用的ではありません。
観測した虚偽表示の合計 が正規分布
に従うと仮定します。母分散
は既知とします。帰無仮説では、
を仮定し、合計
が正規分布
に従うとします。有意水準
で、観測した虚偽表示の合計
が
以上であれば棄却するとします。
は臨界値です。
すなわち、
一方で、 で棄却する場合の検出力が
である必要があります。検出力は対立仮説の分布を前提に計算します。
上記2式から nについて解くと
ここで とおいて
AAG-SAM Table D-1では を小数点3位以降を切り捨てにした値が与えられ、これを用いて計算することになっています。

4.4 Classical Variables Samplingの前提の問題
(1) 母分散が既知というのは厳しいです。母分散がわからない場合、サンプルから推定することもできますが、虚偽表示がたくさんないと推定が難しいです。
(2) 虚偽表示合計が正規分布に従うことを仮定しています。合計値なので、中心極限定理により、n -> infで正規分布に分布収束するのですが、中心極限定理の収束速度は のオーダーでかつ、標本金額の分布形状に影響され、歪みが大きいほど収束は遅くなります。
経済分野の金額の分布は(パレートの法則と言われるように)大抵の場合は裾が長い分布になりますので歪みが大きいです。十分にnが大きくないのに正規分布を仮定してしまうと、乖離してしまう可能性があります。さらに、classical variables Sampllingのサンプルサイズは検出力を用いて計算されており、予想虚偽表示額でぎりぎり棄却できるように設計している他の方法とは方針が大きく異なります。
4.5 【AAG-SAM】監査リスクモデル
ところで実証手続(詳細テスト)の範囲は内部統制の評価に影響を受けます。実は95%としていた信頼度は内部統制評価の結果によって決まっていることになっています。それを表現しているのが次の監査リスクモデルです。
重要な虚偽表示リスクに実証手続の範囲は依存します。
監査リスクを一連の監査の結果虚偽表示が存在する確率として、以下のようにエラー有無や不備の有無を定義します。
{1: エラーがある場合, 0: エラーがない場合}
{1: 統制活動で不備とする, 0: 不備としない}
= {1: 重要な虚偽表示があると推定, 0: 重要な虚偽表示がないと推定}
エラーがあり、かつ、統制の結果エラーがないと判断し、監査人が重要な虚偽表示がないと判断する確率 を分解すると
となります。 左から発見リスク、統制リスク、固有リスクと呼ばれています。 また、
のように、統制リスクと固有リスクをまとめて重要な虚偽表示リスクと書くこともできます。 また、発見リスク部分を詳細テストとその他の手続(実証手続における分析的手続)に分けている場合もあります。
監査リスクモデルの使い方ですが、例えば、アサーションレベルの監査リスクが5%、内部統制を評価して重要な虚偽表示リスクが60%の場合
となります。つまり、要求される発見リスクは5%/60% = 8.3%となります。 ここで、統制活動は対象の業務プロセスのすべてに対して実施されますが、監査人の詳細テストはサンプリングによって実施されます。監査人の手続が適切でサンプルの中の誤りを見落とす確率が0%と仮定すると、発見リスクはサンプリングリスク、すなわち1-要求信頼度となります。
ところで、上の例で60%と仮定した重要な虚偽表示リスクについてですが、AAG-SAMでは、重要な虚偽表示リスクは10%, 30%, 50%, 100%と非常に広い範囲を想定しています。 重要な虚偽表示リスクは内部統制で評価した逸脱率から決まると思っていたのですが、この部分の関係は記載されていませんでした。許容逸脱率ベースだとすると10%程度なので、スケールが合いません。 AAG-SAMには「監査リスクモデルは各リスクの関係を理解するためのもので、監査リスクモデルを使って直接リスクを計算する必要はない」と書かれていますが、この部分の関係性があってこそ内部統制監査と財務諸表監査の一体監査が設計できるので、もやもやしています。
4.6 サンプリングではなくAI等による全件調査を採用する場合
すでに監査の現場ではAIによる自動監査を用いて、全件調査を採用しているケースがあると思います。 サンプリングの場合、選んだサンプルに対しては100%確実で適切な調査がされる前提ですが、一方で、AI等による全件調査の場合には、すべてのサンプルに対して一定の水準の調査がされる前提(を受け入れざるを得ない状況)になります。統計的サンプリングでは発見リスク=サンプリングリスクとしていましたが、発見リスクを全件調査で見落とすリスクとして扱う必要がでてきます。
AIで全件調査をする場合は、サンプリングの場合と異なり、推定による虚偽表示の性能を信頼度等であらかじめ設計することができません。事後的にインプットデータを見てAIの予測精度を評価する必要があります。
4.7 【AAG-SAM】虚偽表示の上限(上限虚偽表示額)の推定
内部統制の運用評価手続とは異なり、詳細テストでは虚偽表示の上限は帰無仮説が成り立つ前提で計算します。帰無仮説が棄却されているので、推定した虚偽表示額がこれを上回ることはないというロジックです。(ですので、詳細テストの計画時に許容虚偽表示額が適切に設定されていればただの出来レースな気がします。)
帰無仮説は虚偽表示件数についてポアソン分布 を仮定していました。この
はサンプルサイズ設計の際に計算しています。
例えば、信頼度95%、許容虚偽表示率3%、予想虚偽表示率0.6%の時の
は6.3でした。これは帰無仮説における許容虚偽表示数を連続値にしたものです。
ここで、この連続値にした許容虚偽表示数に平均金額(金額単位抽出のサンプリング間隔)を乗じたものが、虚偽表示の上限となります。
ちなみに、詳細テストで棄却できない場合には帰無仮説の成立を積極的に主張して推定することはできません。そのためか、帰無仮説を棄却できないときに帰無仮説で計算した虚偽表示の上限にはほとんど意味がなく、AAG-SAMに該当する記載はありませんでした。
キーワード
上限虚偽表示額(upper limit on the misstatement):帰無仮説の棄却上限で計算した虚偽表示額の上限の推定値
4.8 【AAG-SAM】部分虚偽表示(Tainting)がある場合
虚偽表示が帳簿価額の一部である場合、Taintingが発生していると表現し、帳簿価額に対する虚偽表示額の割合をTainting率と呼びます。4.2や4.7ではTaintingは常に100%(もしあるレコードが虚偽表示であるなら、その帳簿価額がそのまま虚偽表示額。つまり全額計上を認めないケース)を仮定していました。Taintingを常に100%を仮定することは保守的にサンプルサイズや推定上限虚偽表示額を算定できます。このうち推定上限虚偽表示額については過度に保守的であることが監査の効率性を大きく損ねるため、Taintingを考慮した算定方法が提案されています。Taintingを考慮する場合は、Stringer boundと呼ばれる方法で、実際のTainting割合ベースで計算するものの、その不確実性を上限に反映させるアプローチです。100%Taintingで計算するよりは推定額が小さくなります。 4.2で説明した通り、推定したい虚偽表示額は次のように表されます。
この が0〜1の値をとる場合を考えます。
ここでは予想逸脱数だけ虚偽表示が発生していると仮定します。(つまりサンプルサイズが適切に設計されていれば帰無仮説は棄却できている前提です。)
サンプルの虚偽表示金額は
とかけます。この値の90%推定上限を求めたいのですが、 の推定上限は k件の許容逸脱率が発生する場合の帰無仮説のポアソン分布の
です。
と書きます。
虚偽表示がもし、j-1件であれば
であり、虚偽表示が j-1件から j件に増えたときの増分は
となるので、推定上限
は
と分割できます。その結果、推定上限は
となりますが、
と
の対応関係は不明です。要素積の最大値は再配列不等式(rearrangement inequality)により
と再配列した場合となります。
その結果、
(ただし
)が推定上限と計算できます。
具体的な計算例についてはAAG-SAM $6.44以降に記載があります。
で、この計算は適切なのかというと、あまり自信がないです。件数ベースの推定上限に をかけあわせているときの、組み合わせを再配列不等式で最大にしているだけなので、
自信の不確実性を考慮していないのではないかと考えています。違っていたらごめんなさい。実務的にはTainting100%を仮定してやってしまうのが無難だと思います。
4.9 ベイズモデルによる虚偽表示額の上限推定
AAG-SAMでは帰無仮説ベースの推定上限の計算しか記載されておらず、帰無仮説が棄却できなかった時の金額的な重要性の評価が行えません。 というわけで、詳細テストを行なった手元のサンプルの観測から、虚偽表示を推定する方法を紹介します。 先ほどと同様に、
の が0〜1の値をとる場合を考えます。
が1を超える拡張はとりあえず考えません。
ここでは
を明示的にモデリングします。
虚偽表示が発生するケースは稀なので
の観測のほとんどは0になります。このような場合はzero inflatedな分布でモデリングできます。例えば、階層ベータ分布は
が0か1かの予測(ベルヌーイ分布)と0より大きい値をとる時の値の生成(ベータ分布)の2階層のモデルをつくることができます。
また、特徴量のデータが十分にある場合には0か1かの予測を2項分布GLM、0より大きい値をとる時の値をロジスティック回帰で別々に行うことも考えられます。
4.10 金額単位抽出を活かした虚偽表示額の推定
<2026/08/07>"金額単位"抽出を考慮してモデリングして議論できるため、こちらも訂正いたします。
金額単位抽出と言いながら、ここまで抽出ウェイトを利用した推定の話が出てきませんでした。
金額単位抽出により層化されて効果的になるみたいなことはAAG-SAMに記載がされていましたが、サンプルサイズ計算における帰無仮説の仮定に反映されているわけでもなく、単に金額のカバー率を高めるのみで統計的推測には加味されていないように思えます。むしろ選択バイアスが邪魔になっているのではとも思います。
せっかくなので、この選択バイアスを活かした虚偽表示の推定方法を紹介します。
金額単位抽出は金額に比例して抽出確率が上がるので、確率比重抽出(probability proportional sampling)とみなすことができます(ここまではAAG-SAMに記載されています)。母集団の虚偽表示額の推定は帳簿価額を補助変数にしたHansen-Hurwitz推定量を用いることで、分散の小さい推定を行えます。簡単にするために、抽出間隔の金額を超える帳簿価額は別で精査するために除外していると仮定します。
抽出確率 は帳簿価額に比例した
となります。
抽出ウェイト
を用いて、
として計算できます。
ここで、あれ、HH推定量の信頼区間ってどうするのだろうと思って調べてみたところ、ブートストラップ法を使ってサンプルからのシミュレーションで計算しているようでした。サンプルから虚偽表示が大量に見つかるケースは想定しづらいので、計算はちょっと難しいのかなと思います(というより、力尽きました。また活力が湧いたら勉強して調べてみます。)。
私の考える最強の統計的サンプリング
ベイズモデルは事前知識の導入や監査リスクモデルにおけるリスクの分解や条件付けによる分離と相性がよく、自然に監査リスク全体をモデリングできると考えています。さらに、ベイズ推定に必要なサンプルが集まるまでの間に明らかに逸脱率や虚偽表示リスクが小さい場合は棄却する多段階検定計画(逐次検定計画)を取り入れることができそうです。能動サンプリングのような現状のモデルの不確実性によってサンプリングするアプローチも盛り込みたいです。 一方で、ベイズモデリングでも金額に比例した抽出を行なっている場合には、HH推定量の分散が補助変数によって小さくなるのと同様に事後分布の裾が狭くなったりするとよいのですが、ベイズモデリングでは抽出の工夫を反映させることが難しいなと悩んでいます。
以上の要望に応える最強の統計的サンプリングをpythonで実装してください。とかやれば近い将来のAI先生がきっといい感じの手法をつくってくれることでしょう。
まとめ
統計的サンプリングは統計学の社会実装として大変美しく、実務の複雑さゆえに多くの問題があります。 この記事ではあくまで統計学的な見方で議論しましたが、さらに実務的な要請が加わります。 特に現場で活躍する監査担当者はルールや理論がそのまま当てはめることができない場合に多く遭遇していることでしょう。そのときルールや理論と現実にとれる方法の間を如何に器用に埋めれるかのセンスが問われます。 ここで紹介した背景や論点が現実の難しい問題解決のヒントになれば幸いです。 読んでくださりありがとうございました。
参考文献
監査における統計的サンプリング関連
[1] AAG-SAM: American Institute of Certified Public Accountants (AICPA) (2017), "Audit sampling, May 1, 2017; Audit Guide" (2017). Industry Guides (AAGs), Risk Alerts, and Checklists. 1372.
https://egrove.olemiss.edu/aicpa_indev/1372
本記事で解説の対象としているガイドです。
[2] Stewart, T.R. (2012). "Technical Notes on the AICPA Audit Guide Audit Sampling".
https://www.studocu.com/row/document/the-american-university-in-cairo/banking/sampling-guide-technical-notes/112706217
AAG-SAMのTableの数値の算定方法が書いてあります。
[3] Roberts, Donald M., (1978). "Statistical auditing". Guides, Handbooks and Manuals. 1576.
https://egrove.olemiss.edu/aicpa_guides/1576
AAG-SAMの元になったものと思われます。
[4] 企業会計審議会(2023),「財務報告に係る内部統制の評価及び監査の基準並びに財務報告に係る内部統制の評価及び監査に関する実施基準(令和5年4月7日時点)」
https://www.fsa.go.jp/singi/singi_kigyou/top.html
(2)①ロ.a.に25件が例示されています。
[5] Durney, Michael Thomas and Elder, Randy and Glover, Steven M., (2013), "Error Rates, Error Projection, and Consideration of Sampling Risk: Audit Sampling Data from the Field". Available at SSRN: https://ssrn.com/abstract=2245866 or http://dx.doi.org/10.2139/ssrn.2245866
[6] 加藤 真大, 中川 慧(2025) 財務諸表監査のための逐次検定:試査手順の統計学的な定式化と理論保証
https://www.jstage.jst.go.jp/article/jsaisigtwo/2025/FIN-035/2025_117/_article/-char/ja/
監査サンプリングにおける逐次検定を扱っています。
[7] Koen Derks (2025) Statistical Audit Sampling with R.
https://koenderks.github.io/sasr/
ベイズを用いた統計的サンプリングを大きく扱っています。頻度論を使っている場合はAAG-SAMに概ね準拠しています。ベイズモデルや階層化のサンプルサイズの決め方はかなり攻めてます。
[8] 富田 竜一, 西山 都, 石原 佳和 (2007), 『Q&A監査のための統計的サンプリング入門』, 金融財政事情研究会.
監査における統計的サンプリングについて背景から実務的なポイントまでわかりやすく説明されています。計算部分についてはAAG-SAMに準拠しています。
[9] 増田 幸一(2018)『監査における統計的サンプリング法 米国公認会計士協会Audit Guide準拠』, 米国公認会計士協会.
AAG-SAM[1]と"Technical Notes on the AICPA Audit Guide Audit Sampling"[2]のうち計算部分を抜粋して翻訳したものに、導出が追加されています。導出が少々遠回りなところがありますが計算方法を解読するためには大変参考になります。
[10] 稲垣 大輔, 小澤 圭都 著, 野呂 祐介, 蜂谷 悠希 (2023)『Pythonではじめる会計データサイエンス』, 中央経済社.
https://www.biz-book.jp/isbn/978-4-502-43811-0
3章で監査サンプリングを扱っています。このブログでは扱っていない取引レコードから実際にサンプリングを行うPythonコードの解説もあります。
統計関連
[10] 竹村 彰通(2020),『現代数理統計学』, 学術図書出版社.
https://www.gakujutsu.co.jp/product/978-4-7806-0860-1/
信頼できる本です。基本的な統計で困ったらこれを確認しています。
[11] 星野 匡郎(2025),『統計的仮説検定の方法論』, 日本評論社.
https://www.nippyo.co.jp/shop/book/9561.html
仮説検定について詳しく信頼できる本です。現代的な問題設定を扱ってくれていて大変ためになります。
[12] 永田 靖(2003),『サンプルサイズの決め方』, 朝倉書店.
https://www.asakura.co.jp/detail.php?book_code=12665&srsltid=AfmBOoqt214Eg88VfwTaYCU_7jaTjVEcSSAP0MawyyDhVH5Mvp3T3TO0
主にパラメトリックな検定についてのサンプルサイズの計算方法が詳しく解説されています。監査サンプリングでは予測逸脱数ぎりぎりで棄却できるようにサンプルサイズを決めているため、こちらの本の内容とは乖離があります。ただし、本記事4.3で扱ったClassical Variables Samplingは一般的な統計学の方法に基づいており、本記事を解読するよりも、こちらの3章を読むことをお勧めいたします。
[13]土屋 隆裕 『標本調査法』, 朝倉書店.
https://www.asakura.co.jp/detail.php?book_code=12791&srsltid=AfmBOorjvWvefXk1hTb7TXFfJ88C2_cvtc3bv2lIZDBAdB9b7hxf2r2I
本記事4.10で紹介したHH推定量(やHT推定量)について、さまざまなサンプリング方法から詳しく解説されています。






























