Silviase/jgov_v1.4_full_ann huggingface dataset:
RA : CPU Pentium III 700MHz : 内部メモリ1,280MB : ハードディスク18.1GB) が増設されたこともあり，検索時間の短縮も図られるものと思う。

しかしながら，検索スピードの向上は，並列処理の解消以外の方法，つまり，効率的な検索システムの構築によっても図られる可能性があると思われたので，試験的に前歴を検索するシステムの開発をした上で，その運用実験を行いながら，具体的な問題解消方策を検討することとした。

この検討を行う当たって，法務省矯正局から，テキストファイル形式のWANデータ（平成11年9月1日時点のもの）の提供を受けた。

ソフトウェアのシステム設計・製作は，滝本が担当した。ソフトウェアの製作・運用試験のために使用したプログラミング言語，ハードウェアの仕様は以下のとおりである。

(1) 使用言語 Delphi 3 Standard (Borland 社製)
(2) 使用マシンの性能
CPU Pentium III 500MHz
内部メモリ 64MB ハードディスク 6 GB
(3) 使用 OS Windows98

Delphi を製作用言語として採用したのは，これがいわゆる PASCAL 系の言語で，WAN データが運用されているシステムの OS である UNIX の標準言語である C 言語と極めて近い論理・表現構造をもっており，将来，UNIX でのシステム構築を考えていく上で参考になると思ったからである。製作した基本ソースプログラムは，関係個所に随時表記するとともに，今後の UNIX 上でのシステム開発の参考になると考え，必要に応じて C 言語に書き直したものも並記している。なお，C 言語のソースプログラムの動作確認は，Delphi と同じ Borland 社製の TURBO C++ For Windows で行った。なお，本稿中で使用する C 言語の標準関数は，ANSI（米国規格協会）が認めているものである。

まず，最初に作成した検索システムのフローチャートは，図２のとおりである。

Delphi で記述したこのシステムは，標準関数である Pos を使用したものであり，シンプルであるが，それゆえに融通性もある。

ところで，本研究においては，種々の文字列検索に関するシステムを考案・製作していくことになるので，その際に使用する文字列検索の基本となる理論をここであらかじめ説明しておきたい。

まず，文字列のメモリ内での格納方法であるが，PASCAL的に言之ばString型とpChar型に分けられる。この二つの型は，個々の文字列の長さが異なること，つまり「可変長」であることに関係がある。「apple」と「orange」のように，個々の文字列は文字数つまり長さが異なるため，文字列を管理していくためにはその長さを何らかの方法で特定していく必要がある。String型は，下図のように，文字列領域に指定したメモリの最初のバイトでその「長さ」を示すデータを持つ型である。

Fr という String 型文字列変数に “APPLE” を代入した場合

fr $$ 0 $$	fr $$ 1 $$	fr $$ 2 $$	fr $$ 3 $$	fr $$ 4 $$	fr $$ 5 $$
5	A	P	P	L	E

上部の fr [ ] は，文字列内の個々の文字の格納場所を表現する方法である。[ ] の間に数字を入れて何バイト目であるかを示す。
一方，pChar 型は，下図のように，文字列データの終わりに文字列の終端であることを示すヌル文字を付ける形式のものである。

fr $$ 0 $$ fr $$ 1 $$ fr $$ 2 $$ fr $$ 3 $$ fr $$ 4 $$ fr $$ 5 $$

A	P	P	L	E	#0

String 型は PASCAL 系言語である Delphi の標準の型であり, pchar 型は, C 言語の標準型である。したがって, delphai 中で, 以下のように, 文字列変数 fr を指定すると, fr[4] は 'L' の文字に対応することになり, C 言語の中で char[6] として fr を指定した場合は fr[4] は 'E' を示すことになる。

さて，図6のフローチャートに従って，Delphiで製作したのが図7のソフトフェアである。プログラム1は，そのソースプログラムである。
図6 標準関数を使用した検索システムのフローチャート
図7 Delphiで作成した検索システムのメインウィンドウ
プログラム1 標準関数を使用した検索作業記述部分のソースプログラム

while not Eof(F) do {指定ファイルから1行ずつ読み出し終端まで進む。}
begin

Readln(F, s); {ファイルからの1行読み出し}

for i := 0 to Richedit2.Lines. Count-1 do {検索対象文字列を順次繰り下げ}
begin

if (Pos(Richedit2.Lines[i], s) >= StrToint(edit1.Text)) and (Pos(Richedit2.Lines[i], s) <= StrToint(Edit2.Text)) then {読み出し行にエディト行が含まれているか否かのチェック}

begin

Writeln(F2, IntToStr(i + 1) + '；' + s); {ファイルへの書き出し}
break; {for ループから抜け出す}
end;
end;
end;

{ }で囲まれた記述はコメント文で，プログラムを見やすくするためだけのものである。各文の終端は，セミコロンで区切る。WhileやForは，ループを描くための文である。Readln及びWritelnは，テキストファイルから文字列を1行ずつ読み出したり，逆に1行ずつ書き出したりするための標準関数である。PASCAL系の文字列検索用の標準関数はPosであり，次の例で示すように，検索したい文字列と検索の対象となっている文字列をそれぞれ独立変数とし，検索したい文字列が対象文字列内に見当たらないときには，0が，見つかったときにはその文字列の位置（数値）が返ってくる。

例えば，「我が国の行刑施設における受刑者処遇の基調は，受刑者の改善更生及び社会復帰を図ることに置かれている。」という文字列をＳに代入し，「改善更生」をｔに代入して，Pos関数を使用した場合，記述は，Pos(t,s)のようになるが，改善更生は前から27文字目にあるため，53という数字が返ってくることになる（全角文字は，1文字が2バイトで表現されるため，「改善更生」の「改」の文字の1バイト目は，前から数えれば53バイト目ということになるのである。）。

この Pos 関数に対応する関数は C 言語にはなく, それと類似した役割を担っているのが strstr 関数である。しかしながら, 同関数は, 検索している文字列を対象文字列から見つけ出してから, 同文字列を先頭にした部分文字列を出力するというもので, 指定文字列の対象文字列での位置を「整数」で教えてくれるというものではない。そのため, Pos 関数に相当するものは C 言語では自作する以外にはないことになる。UNIX 上での将来的な利用を考慮して, C 言語用の Pos 関数として試験的に作ったのがプログラム 2 の Posc 関数である。
## プログラム 2 Posc 関数 (Delphi の Pos 関数を C で記述したもの)

int Posc(char a[23], char b[23]) {/*オリジナル文字列検索関数*/
int i, h, g, j;
for(g = 0; g < strlen(a); g++) {
for(i = 0; i < strlen(b); i++) {
if(a[g + i] == b[i]) h = 7;
else { h = -1;
break;
}
}
if (h == 7) {
j = g;
break;
}
return j;
}

上記プログラムの記述内容から明らかなように，Delphi の Pos 関数は，指定文字列の有無を検索対象文字列中でしらみつぶしに探すよう仕組まれている（その点，C 言語の strstr 関数も同様である。）。もちろん，探している途中で発見できればその時点で検索は中断されるのであるが，もし，対象文字列中にない場合には，文字列の最後まで検索を続けることに留意しておいていただきたい。

ところで，C言語の記述は，PASCALのそれに酷似しており，そのことからも，移植性の高さが分かる。本研究に関連するプログラムに関して知っておく必要のある双方の相違点は表1のとおりである。
表1 本研究に関連するプログラムに関して知っておく必要のある双方の相違点

Delphi	C 言語
文の区切り	セミコロン	左同
コメント行	{}	/**/
文字列の表示	‘’	“ ”
ループ又は条件文の始めと終わり	Begin End	{ }
等号	:=	=
関係演算子「等しい」	=	==
関係演算子「等しくない」	<>	!=

図８のWANデータ（行刑施設関係）のフィールド項目及びデータ行について，検索対象範囲を絞り込みながら，前記検索システムを運用した結果は表２のとおりである。
図 8 行刑施設 WAN データ管理状況

表 2 ソフトウェアの処理速度を含む運用試験の結果

検索方法	検索キー数	検索対象フィールド項目	検索結果の出力フィールド項目数	データ件数	検索に要した時間
WANデータすべて	2	氏名及び生年月日	70	360.472件	26秒
(1)について出力フィールドを5つに絞る	同上	同上	5	同上	16秒
(2)について,データを釈放施設だけに絞る	同上	同上	5	76.850件	3秒

上記運用実験の結果からも，検索時間の短縮には，データファイルのフィールド項目数又はデータ行数を絞り込むことが必要だということが分かる。これは，ハードディスクからファイル中のデータ行をメモリ内に読み込むための所要時間そのものが，データ行一行当たりの文字数が少なくなればなるほど，また，読み込むデータ行自体の数が少なければ少ないほど，短くなるからなのであるが，このことに加えて，データ行の文字数の減少は，前述したように，読み込まれたデータ行から指定文字列を検索するために要する時間をも短縮しており，これが総検索時間の短縮に相当程度貢献する結果となっている。

この「対象文字列数が少なくなれば検索所要時間も短くなる」という関係を理解するには，コンピュータにおける文字列検索のアルゴリズムを理解しておく必要がある。これを図示したのが図9である。
図9 文字列検索のアルゴリズム

仮に，上図のように，「Grapefruit」という文字列の中から，「fruit」という文字列を探させようとする場合，コンピュータには，対象文字列の先頭から順次「照合」を行わせ，見つけようとしている文字列の先頭の「f」が見つかった段階（第6段階）で，次の文字の「照合」に移行し，それが終われば更に次の文字の照合という具合に作業を進め，全部の文字が合致する部位を発見させるという手順を取る。文字列検索というものがこのような作業過程を経る関係上，データ行の文字数が少なければ少ないほど，検索に要する時間も短くなるのである。

収容前歴調査の場合は，せいぜい一回当たり20～30件程度の照会に対応できれば実用性に関してほとんど問題が生じないと思われる反面，「成行き調査」ということになれば，同時に数百件，数千件の照会に対応する必要が生じるものと思われる。このような場合には，上述のように文字列全部をチェックするのは余分なことであり，「ありそうな場所」だけをピンポイントでチェックする独自のシステムの構築が検討されなければならない。

そこで，既存の検索アルゴリズムとは別の考え方で，この種の検索作業を更に高速化する方法の検討に入った結果，図10のようなアルゴリズムによるオリジナル関数 Tsearch の開発に成功した。
図10 アルゴリズムによるオリジナル関数 Tsearch の開発 標準関数による検索

Stand
Prüfung
Anteilserwerb
Lufthansa
Eurowings
Verstärkung
Marktbeherrschenden
Stellung
Auswirkungen
Wettbewerb
Regionalflugverkehr
Deutschland
Ausland
Drehkreuzen
Inland
Kartellamt
Unternehmen
Aabsicht
Umständen

Stand
Prüfung
Anteilserwerb
Lufthansa
Eurowings
Verstärkung
Marktbeherrschenden
Stellung
Auswirkungen
Wettbewerb
Regionalflugverkehr
Deutschland
Ausland
Drehkreuzen
Inland
Kartellamt
Unternehmen
Absicht
Umständen
オリジナル関数による検索
オリジナル関数には，図10に示したような「順序判定」機能があるため，検索前のデータ等のソート（並べ替え）を前提にしながら，無駄のない効率的な検索を実現しているのである。

コンピュータ上では，数字は当然のことであるが，文字にも数値が割り付けられており，これを利用して，文字列を昇順又は降順で並べ替えることができる。オリジナル関数 Tsearch は，照合の対象となっている双方の文字列中で最初に一致しなかった部位の双方の文字に割り付けられた数値を比較して，その大小を判定することができるのである。図11のケースを例にとれば，双方の文字列で最初に一致しない部位が2文字目であることを発見した上，双方の2文字目にある「b」及び「u」を比較して，「u＞b」との判定を行うのがオリジナル関数の特徴である。

図11 無駄のない効率的な検索

この機能を使うと，まったく同じ文字列なら，「合致する」，また，一致しない文字列なら，「双方の文字列中で先頭から見て最初に異なる部位の文字のどちらが大きい」という答を返してくるため，検索対象群がソートされていさえすれば，無駄のない探し方ができるというわけである。

ただ，検索対象文字列がデータ中にある場合と異なり，指定文字列がデータ群の中に含まれている保証がないようなケースでは図12のように，アルゴリズムは若干複雑なものとなる。
図12 指定文字列がデータ群の中に含まれている保証がないケースでのアルゴリズム
データ8行目に一致する文字列が見つかったので、その結果を書き出し、指定文字列の行を3行目に繰り下げる。見つかった場合は、データの行も繰り下げる。

指定文字列3行目と、データ9行目から照合が再び始まる。

標準関数 Pos とオリジナル関数 Tsearch での検索結果を比較した結果は次のとおりであり, その処理速度の差は歴然である。

Pos関数による処理時間	Tsearch関数による処理時間
1件の検索時間	約4秒	約4秒
5,000件の検索時間	約2日	約20秒

*検索データ数は約30万件
固定書式（タブ記号などを用いて，フィールド境界を識別させる自由書式とは異なり，それぞれのフィールドに一定の文字幅を定め，余白は半角スペースで埋める方式）で記述されたテキストファイルを対象とする Tsearch 関数のソースプログラム，そしてそれを C 言語で表記したものが，プログラム 3 及びプログラム 4 である。図13は，Tsearch 関数を利用した検索システムのフローチャート，プログラム 5 は，Tsearch 関数を使用した検索システムを Delphi で記述したものである。

Delphi の場合, 文字列を格納しているメモリ領域からそれぞれの文字に対応する数値を取り出そうとすると, ord という関数を働かせる必要があるが, C 言語の場合, 文字列を格納しているメモリ領域から対応数値を「添字」を使って直接取り出すことができるのがメリットである。

図13 Tsearch 関数を利用した検索システムのフローチャート
## プログラム 3 Delphi で記述した Tsearch 関数

function TSearch(t: String; s: String; a: integer; b: integer): Integer;

var

h, i: Integer;

begin

For i := a to b do {文字列中の指定した範囲のメモリ領域のみを検索するループ}

begin

h := ord(s[i]) - ord(t[i]); {文字列中の特定バイトに対応する数値の抽出}

if h <> 0 then

begin

TSearch := h; {処理後，関数値として整数 h を返す.}

break;

end

else TSearch := h; {処理後，関数値として整数 h を返す.}

end;

end;

## プログラム 4 C で記述した Tsearch 関数

int Posc(char a, char b, int c, int d)/*Posc 関数の独立変数文字ポインタ a, b 及び整数 c, d の指定*/
{
int i, h, j;

for(i = c; i < d; i++)/*変数 i を c から d までインクリメント・ループ*/
{
h = a[I] - b[I];/*文字列ポインタ a, b のメモリ領域内の減算*/
if (h != 0) {
j = h;/*h でない 0 の場合は j に h を代入する*/
break;/*ループを抜ける*/
}
j = h;/*h が 0 の場合はその 0 を j に代入*/
}
return j;/*Posc 関数の演算結果 j を返す*/
}
プログラム 5 Delphi で記述した高速大量検索システムのソースプログラム

procedure TForm1.BitBtn1Click(Sender: TObject);
var
F, F2 : textFile;
S, t : String;
a, b, i, j, m, k : Longint;
begin
i := 0;
m := 0;
k := 0;
if (Richedit2.Lines[0] = "") or (FileList.FileName = "") or (Edit1.Text = "") or (Text = "") then
begin
MessageDlg('検索対象ファイル又は検索語の指定が不正です！', mtWarning, [mbOK], 0);
exit;
end;
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
Assignfile(F2, ChangeFileExt(FileList.FileName, '.Res));
Rewrite(F2);
AssignFile(F, FileList.FileName); {ファイル名の指定}
Reset(F); {リセット}
Screen.Cursor := crHourglass;
while not Eof(F) do
begin
if k = 0 then
begin
Readln(F, s); {ファイルからの1行読み出し}
m := m + 1;
end
else k := 0;
end
end: Richedit2.Lines[i];
j := tsearch(t, s, a, b);
if j = 0 then {読み出し行にエディト行が含まれているか否かのチェック}
end;
end;
begin

Writeln(F2, IntToStr(i + 1) + ')' + s);
i := i + 1;
end

else

begin

if j > 0 then {S が t より大きい場合}

begin

k := 7; {s のインクリメントを止めるフラグオン}

i := i + 1; {T をインクリメント}

end;
end;
if i > Richedit2.Lines.Count - 1 then break;
end;

CloseFile(F);
CloseFile(F2);
MessageDlg('作業が終了しました /: ' + IntToStr(m), mtWarning, [mbOK], 0);

Screen.Cursor := crDefault;
Filelist.update;
end;

上記システムは前述したように, 固定書式テキストファイルを前提にしているが, タブ記号等でフィールドを指定している自由書式ファイルに対しては, 作業の前提としてファイル中の各行のタブ記号の位置を判別し, 指定されたデータフィールドを切り取ってくるという作業が前提となる。

タブ記号を例にして，指定したフィールド行をファイル中から抽出する作業をC言語で記述すると以下のようになる。

for(g = 0; g < strlen(a); g++) {
if (a[g] == '¥t') {
k++;
}
if (k == i) break;
if (k == i - 1) {
b[1] = a[g + 1];
1++;
}
}
b[1] = '¥0';

Strlen というのは, 文字列の長さを調べる標準関数である。a という文字配列に代入された指定データ行から, 右から何バイト目という形で指定 (指定数値は i に代入) されたデータフィールドだけを抽出する作業は上記のように極めてシンプルなプログラムとなる。メモリ領域内での操作が容易な C 言語ならではの記述である。また, ソートを ORACLE に行わせた場合にはそれに相当の時間を要するため, ソート自体を C 言語で記述することも一方法だろう。その場合には, テンポラリ (一時) ファイルを利用することで効率化が図れる。このファイルは, プログラムの終了時点で自動的に削除されるもので, tmpfile という標準関数を用いることで生成される。

なお, Tsearch 関数の運用には, 対象データ群があらかじめソートされている必要があるが, WAN データのように, 毎日, 新規のデータが書き加えられるような形式のデータベースの場合, 毎日ソートするというのでは, その実用性は著しく低いものになってしまう。そのため, Tsearch 関数の実用性を維持するために, いったんソートして出力したデータファイル中に, 毎日新たに発生する新規のデータを, 順序に従った形で填め込んでいくというシステムが必要になる。

プログラム6は，そういったデータの填め込み作業を行うシステムをDelphiで記述したものである。C言語でも書き方はさほど異ならない。ファイルの入出力は，fopen(読出し又は書込みのモード指定)，fscanf（ファイルから1行読出し）及びfprintf（ファイルへの1行書込み）の3つの関数をそれぞれAssignfile，Reset及びRewriteに対応する形で使用すれば，後の記述はほぼそのまま(記述のルール上の差異には気をつけなければならない。）利用できる。図14は，Tsearch関数を使った検索及びソートデータへの新規データの填め込みシステムを搭載したソフトウェアのメインウィンドウ画面である。

プログラム6 データの埋め込みを行うシステムのソースプログラム

procedure Tform1.BitBtn1Click(Sender: TObject);
var
F, F2 : textFile;
S, t : String;
a, b, i, j, m, k : Longint;
begin
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
AssignFile(F2, ChangeFileExt(FileList.FileName, '.Res');
Rewrite(F2);
AssignFile(F, FileList.FileName); {ファイル名の指定}
Reset(F); {リセット}
Screen.Cursor := crHourglass;
while not Eof(F) do {データファイルの終末判定}
end
begin

if k = 0 then {データ読出し許可フラグのチェック}

begin

Readln(F, s); {ファイルからの1行読み出し}

m := m + 1;

end

else k := 0;

t := Richedit2.Lines[i];

j := tsearch(t, s, a, b);

if j >= 0 then {対象データとエディット行の先後のチェック}
begin

Writeln(F2, t); {エディット行のファイルへの書込み}
i := i + 1; {エディット行のインクリメント}
k := 7; {データファイルの読込みストップ}
end

else Writeln(F2, s); {エディット行よりデータが先の場合はデータ行の書込み}
if i > Richedit2.Lines.Count - 1 then break; {エディット行の終末判定}
end;

CloseFile(F);
CloseFile(F2);
MessageDlg('作業が終了しました！:' + IntToStr(m), mtWarning, [mbOK], 0);

Screen.Cursor := crDefault;
Filelist.update;
;
図14 Tsearch関数を使った検索及びソートデータへの新規データの填め込みシステムを搭載したソフトウェアのメインウィンドウ画面

本研究のオリジナル関数である Tsearch 関数は，上述したように極めて高速の検索を実現するのであるが，文字列内で部分文字列を照合する作業の場合には利用できないことに留意しておく必要がある。もちろん，WAN データについて部分一致検索が必要になる場面があるかどうか自体不明なのであるが，仮に，複数の部分文字列に関して OR（論理和）検索や AND（論理積）検索が必要となったときには，標準関数を使った検索が必要になる。

とはいえ，本研究で開発したシステムが検索の効率を飛躍的に高めたことは間違いなく，同コンセプトを踏まえたシステムがあれば，WANデータの蓄積が17年後に8倍以上になったとしても十分実用性のある検索が可能だと思われる。また，収容履歴の調査に関してはそれほどのニーズはないかもしれないが，ある程度大規模な「成行き調査」を行おうとする場合には同システムの存在は不可欠である。

これまで，成行き調査については，仮に実施しようとしても，時間と手間がかかりすぎるため，対象とする範囲・件数に制約がつきものであった。しかし，WANデータと同システムを利用すれば，全国の施設からの出院・出所した者について，複数年の規模で大規模な成行き調査を行うこともさほど難しいことではなく，その結果判明した再入者群とそれ以外の群についてその要因の分析等を統計的手法を用いて短時間に行うことが可能になる。

本研究の一環として，開発した高速検索システムを用いて，1997年4月から同年8月までの間に出院
した少年の成行き調査（出院後3年以内に行刑施設を含む矯正施設のいずれかに再入所したか否かの調査）を行ったところ，40万件近いデータの中から再入者を洗い出すのに要した時間はわずか1分ほどにすぎなかった。

このように，Tsearch関数を利用した検索システムにより，大規模・高速の成行き調査が行えることが判明したのであるが，矯正実務上は，単に成行きを知るということよりも，成行きの良否を左右する要因が判明することの方がメリットは格段に大きいといえる。本研究では，上記の成行き調査の結果を踏まえて，成行きの要因分析にも取り組んだ。その結果は次章の2において述べる。
## 第 5 データ・フィールドの内容の統計的分析

WAN データは，コンピュータ上のデータベースであるから，収容履歴の次に手短な利用方策と言えば，データ内容の統計的分析ということになるだろう。データ内容についての項目別度数分布は，その多くが司法法制調査部発行の「矯正統計年報」に記載されている項目と重なっている。そのため，WAN データの統計的集計作業がシステム化されれば，現在行われている，矯正統計年報等を作成するための統計データの収集作業が確実に効率化することになるだろう。この種の統計データ収集作業をWAN データを利用することで簡素化・合理化しようとの試みは矯正局において既に始められているが，誤入力データの存在がその行く手を阻んでいる。誤入力の撲滅のためには，オペレーターの操作能力やモラールの向上，エラーチェックシステムの導入など，多くのハードルを越えていかなければならないのであるが，誤入力が5パーセント程度である現状のデータが統計的に全く使えないと考えるのは早計である。

データ・フィールドの内容分析にとどまらず，次に述べる，データ・フィールド間の関連分析，そして，データ・フィールドの時系列変化の要因分析，同変化の将来予測などにおいても，統計的手法を用いるが，不合理又は矛盾しているデータ群をWANデータ中から取り去ったものでの分析を進めれば，母集団としての全体の動向について合理的な推論を行い得るのである。

なお，前述したように，WAN データはそのデータ全体が7つのパーティションに仕切られている関係上，特定の個人データを参照するといった作業に支障はないものの，統計的処理の前提となる複数データの集計のためには，管理番号をキーにして，複数のパーティション内のデータ・フィールドを連結することが求められる。しかしながら，ORACLEデータベースでは，それぞれのパーティション内のデータの配列が一律ではない上に，図2及び図4で示したように各パーティション内に生成されるデータ量が異なっているため，単純に連結することができないのである。

本研究では，統計処理のために必要とされる，異なるパーティション間でのデータ・フィールドの連結を，独自に製作したソフトウェアを用いて行った。連結の手順は図14に示すとおりであるが，管理番号の検索には Tsearch 関数が活躍することになった。

このように，WAN データを利用した統計処理には，パーティション間のデータの連結作業が不可避であるが，これを ORACLE がもつ SQL コマンドを利用して行うには相当の困難が予想されるため，後述するように，高級プログラミング言語で記述したシステムの開発が望まれる。

WAN データの統計的利用の可能性と将来の発展性を検証する意味もあって，試験的にデータ・フィールド相互のクロス集計及び有意差等の検定を行った。分析に使用したソフトは，エス・ピー・エス・エス(株)のSPSS 10.0 for Windowsである。分析の対象としたのは少年施設データである。成人施設データは，勾留履歴，裁判履歴，施設移送を含む執行履歴など，刑事司法手続的な管理という面に重点が置かれていることもあって，資質鑑別，教育的措置を含め，刑事政策的視点にもウェートが置かれている少年データのほうが分析の対象になりやすいと考えたからである。分析結果の概略は以下のとおりである。

## 1 WAN データを利用した統計処理

## (1) 少年鑑別所退所事由とそれ以外のフィールドとの関連

少年鑑別所退所事由と以下のフィールド項目との関連について集計・分析した。

## ア 非行種別
表 3 のとおり，1％以下の水準で有意な関連が見られた $ (\chi^{2}(320)=11570.954,\ p<0.000) $ 。公務執行妨害，傷害，窃盜，恐喝，暴力行為等処罰に関する法律違反，道交法及び毒劇法違反では「保護観察」が有意に多く，強制わいせつ・同致傷，強姦・同致死傷，殺人，傷害致死，業務上過失致死傷，強盜，放火及び覚せい剤取締法違反では「少年院送致」が有意に多くなっている。

## 初発年齢

表4のとおり，1％以下の水準で有意な関連が見られた $ (\chi^{2}(112)=3643.863,\ p<0.000) $ 。14歳以下とされる者では「少年院送致」が有意に多く，15歳以上とされる者では「保護観察」が有意に多くなっている。
少年鑑別所退所事由	非 行 名

注 1 （）内は，構成比，（）の下の値は，調整済残差である。

2 不詳を除く。

3 「P値」は，モンテカルロ法による。

4 「判定」欄の，「**」は，有意水準1％以下で，それぞれ有意差が見られることを示す。

5 残差分析の結果，濃い塗りつぶしは期待値より有意に多いこと，薄い塗りつぶしは有意に少ないことを示す（5％水準）。
## 退所事由と非行名

非 行 名
表4 少年鑑別所退所事由と初発年齢

少年鑑別所退所事由	初 発 年 齢
## ウ 共犯の状況

1％以下の水準で有意な関連が見られた $ (\chi^{2}(32)=833.756,\ p<0.000) $ 。人数については，「保護観察」は「2人」とする者が，「少年院送致」は「単独」及び「4人以上」とする者で有意に多く，共犯者との関係については，「保護観察」は「遊び仲間」及び「職場仲間」が，「少年院送致」では「施設仲間」及び「不良集団」が有意に多くなっている。

## 工 非行歷等

1％以下の水準で有意な関連が見られた $ (\chi^{2}(32)=2086.983,\ p<0.000) $ 。不良集団関係については，「保護観察」は「なし」が，「少年院送致」は「地域不良集団」，「暴走族等」及び「暴力組織」が有意に多く，薬物等使用歴については，「保護観察」は「なし」及び「大麻」が，「少年院送致」は「覚せい剤」，「有機溶剤」及び「その他の薬物」が有意に多くなっている。また，無免許運転歴，文身，保護観察歴，教護院歴においても，「保護観察」及び「少年院送致」の間に1％以下の水準で有意な関連が認められ，それぞれ，「保護観察」は「なし」が有意に多く，「少年院送致」は経験があるとする者が有意に多いという特徴が見られる。

## 才精神障害

1％以下の水準で有意な関連が見られた $ (\chi^{2}(32)=327.865,\ p<0.000) $ 。「保護観察」は「精神障害なし」が，「少年院送致」は「精神薄弱」，「精神病質」及び「その他の精神障害」が有意に多くなっている。

## カ 本人の職業

1％以下の水準で有意な関連が見られた $ (\chi^{2}(16)=2923.641,\ p<0.000) $ 。「保護観察」は「有職」が，「少年院送致」は「無職（学生・生徒以外）」が有意に多くなっている。

## キ 居住状況

1％以下の水準で有意な関連が見られた $ (\chi^{2}(88)=2019.962,\ p<0.000) $ 。保護観察は「家族と同居」が，「少年院送致」は「同棲」，「知人宅」，「施設」，「不良者の居所」，「浮浪」及び「不定」が有意に多くなっている。また，保護者については，「保護観察」は「実父母」が，「少年院送致」は「実父」，「実母」，「実父義母」，「義父実母」及び「その他」が有意に多くなっており，保護者の職業の有無については，「保護観察」は「有職」，「少年院送致」は「無職」が有意に多くなっている。生活程度については，「保護観察」は，「富裕」及び「普通」が，「少年院送致」は「貧困」が有意に多くなっている。

## ク 附添人

1％以下の水準で有意な関連が見られた $ (\chi^{2}(16)=494.849,\ p<0.000) $ 。「保護観察」では「なし」が，「少年院送致」では，「あり（弁護士）」及び「あり（その他）」が有意に多くなっている。

## ケ 保護者に対する態度

1％以下の水準で有意な関連が見られた（父への態度 $ \chi^{2}(64)=962.134,\ p<0.000 $ ，母への態度 $ \chi^{2}(64)=1258.973,\ p<0.000 $ ）。父への態度については，「保護観察」は「親和・信頼」及び「依存」が，「少年院送致」では，「無関心」，「拒否」，「攻撃・反抗」，「畏怖・恐怖」，「対等・友人」及び「両価」が有意に多くなっており，母への態度については，「保護観察」は「親和・信頼」が，「少年院送致」は「依存」，「無関心」，「拒否」，「攻撃・反抗」，「対等・友人」及び「両価」が有意に多くなっている。
上述の分析結果，鑑別所退所事由と有意な関連があるとされたのは以下のデータ・フィールドである。

非行種別	保護観察歴
非行年齢	教護院歴
共犯の状況	精神障害
非行歴	本人の職業
不良集団関係	居住状況
薬物等使用歴	附添人
無免許運転歴	保護者に対する態度
文身

総じて言えば，「保護観察」群は「少年院送致」群に比べて，非行性が進んでおらず，上記項目がそれを示す徴表となっている。鑑別の精度を高めていくためには，この種の分析を更に継続的に行うとともに，双方の成行きについての分析が不可欠である。WANデータは，「保護観察」処分が決定して鑑別所を退所した少年だけでなく，「不処分」又は「審判不開始」となった少年についても成行きを調べることができるという意味で，鑑別結果の精度及び信頼性を高めるための貴重な情報源となろう。

## (2) 少年院の種別とそれ以外のフィールドとの関連

収容されている少年院の種別と，以下のフィールド項目がどのように関連しているかを分析した。

## ア 非行種別

1％以下の水準で有意な関連が見られた $ (\chi^{2}(114)=950.828,\ p<0.000) $ 。初等少年院（心身に著しい支障のない，14歳以上おおむね16歳未満の少年を収容する。以下「初等」という。）では強制わいせつ・同致傷，傷害，窃盗及び虞犯が，中等少年院（心身に著しい支障のない，おおむね16歳以上20歳未満の少年を収容する。以下「中等」という。）では公務執行妨害，業務上過失致死傷，強盗致死傷及び道交法違反が，特別少年院（心身に著しい支障はないが，犯罪的傾向の進んだ，おおむね16歳以上23歳未満の者を収容する。以下「特別」という。）では強盗，詐欺及び覚せい剤取締法違反が，医療少年院（心身に著しい故障のある，14歳以上26歳未満の者を収容する。以下「医療」という。）では殺人，略取・誘拐，詐欺，放火，軽犯罪法違反，麻薬及び向精神薬取締法，覚せい剤取締法違反及び虞犯が有意に多い。

## 不良集团関係

表 5 のとおり，1％以下の水準で有意な関連が見られた $ (\chi^{2}(12)=1937.733,\ p<0.000) $ 。初等では「不良集団・学生集団」が，中等では「暴走族等」が，特別では「暴力組織」が，医療では「なし」が有意に多い。
表 5 少年院種別と不良集団

少年院種別	不良集団	合計	檢定の結果
なし	不良生徒・学生集団	地域不良集団	暴走族等	暴力組織	P值	判定
初等	493(39.9)-1.9	287(23.2)39.6	320(25.9)0.3	129(10.4)-13.0	6(0.5)-5.3	1,235(100.0)	0.000	**
中等	3,639(42.3)-0.4	80(0.9)-32.2	2,201(25.6)0.2	2,442(28.4)14.5	237(2.8)-1.4
特別	65(31.7)-3.1	1(0.5)-2.4	59(28.8)1.1	40(19.5)-2.0	40(19.5)14.4	205(100.0)
医療	193(61.9)7.1	3(1.0)-2.5	65(20.8)-1.9	38(12.2)-5.5	13(4.2)1.4	312(100.0)
合計	4,390(42.4)	371(3.6)	2,645(25.6)	2,649(25.6)	296(2.9)	10,351(100.0)

注 1 （）内は，構成比，（）の下の値は，調整済残差である。

2 不詳を除く。

4 残差分析の結果，濃い塗りつぶしは期待値より有意に多いこと，薄い塗りつぶしは有意に少ないことを示す（5％水準）。

3 「判定」欄の，「**」は，有意水準1％以下で，それぞれ有意差が見られることを示す。
## ウ 薬物等使用歴

表6のとおり，1％以下の水準で有意な関連が見られた $ (\chi^{2}(15)=280.055,\ p<0.000) $ 。初等では「なし」が，特別では「覚せい剤」が，医療では「大麻及び覚せい剤」が有意に多い。

表 6 少年院種別と薬物使用

少年院種別	薬物使用	合計	檢定の結果
なし	麻薬・あへん	大麻	覚せい剤	有機溶剤	その他	P值	判定
初等	971(78.3)5.4	- (0.0)-0.9	- (0.0)-1.8	56(4.5)-6.6	205(16.5)-0.7	8(0.6)-0.6	1,240(100.0)	0.000	**
中等	6,318(72.0)0.8	6(0.1)1.1	19(0.2)-1.0	829(9.5)-2.6	1,525(17.4)0.9	74(0.8)1.2	8,771(100.0)
特別	126(59.4)-4.1	-1(0.0)-0.4	49(0.5)0.7	36(23.1)6.6	- (17.0)-0.1	212(0.0)-1.3	- (100.0)
医療	160(50.8)-8.5	- (0.0)-0.4	5(1.6)5.0	97(30.8)12.7	51(16.2)-0.5	2(0.6)-0.3	315(100.0)
合計	7,575(71.9)	6(0.1)	25(0.2)	1,031(9.8)	1,817(17.2)	84(0.8)	10,538(100.0)

注 1 （）内は，構成比，（）の下の値は，調整済残差である。

2 不詳を除く。

3 「P値」は，モンテカルロ法による。

5 残差分析の結果，濃い塗りつぶしは期待値より有意に多いこと，薄い塗りつぶしは有意に少ないことを示す（5％水準）。

4 「判定」欄の，「**」は，有意水準1％以下で，それぞれ有意差が見られることを示す。
## 工 居住状况

表7のとおり，1％以下の水準で有意な関連が見られた $ (\chi^{2}(33)=459.773,\ p<0.000) $ 。初等では「施設」，「浮浪」が，中等では「家族と同居」，「同棲」及び「アパート・下宿・間借り等」が，特別では「知人宅」，「不良者の居所」及び「不定」が，医療では「同棲」，「施設」，「浮浪」，「不定」及び「その他」が有意に多い。

表 7 少年院種別と居住状況

少年院種別	居住状況	合計	檢定の結果
家族と同居	同棲	アート・下宿・間借り等	住込み	作業員宿舍	知人宅	施設	不良者の居所	浮浪	旅館・ホテル	不定	その他	P值	判定
初等	974(78.3)1.1	13(1.0)-4.5	8(0.6)-6.5	2(0.2)-2.8	-	33(2.7)-1.5	75(6.0)-1.6	22(1.8)-0.5	51(4.1)-3.0	1(0.1)-1.3	61(4.9)-0.8	4(0.3)-0.7	1,244(100.0)	0.000	**
中等	6,833(77.8)3.8	290(3.3)2.4	399(4.5)5.2	82(0.9)1.8	15(0.2)1.1	308(3.5)1.0	56(0.6)-14.2	163(1.9)-1.7	217(2.5)-4.2	23(0.3)-0.7	361(4.1)-3.8	35(0.4)-1.9
特別	120(56.6)-7.2	10(4.7)1.4	10(4.7)0.5	4(1.9)1.6	1(0.5)1.2	14(6.6)2.6	2(0.9)-0.5	16(7.5)5.9	9(4.2)-1.3	-	24(11.3)-0.7	2(0.9)-1.1	212(100.0)
医療	212(66.7)-4.5	16(5.0)2.0	15(4.7)0.6	3(0.9)0.2	-	7(0.0)-1.2	10(3.1)-2.8	6(1.9)-0.1	16(5.0)2.5	2(0.6)-1.4	24(7.5)-2.7	7(2.2)-4.7	318(100.0)
合計	8,139(77.1)	329(3.1)	432(4.1)	91(0.9)	16(0.2)	362(3.4)	143(1.4)	207(2.0)	293(2.8)	26(0.2)	470(4.5)	48(0.5)	10,556(100.0)

注 1 （）内は，構成比，（）の下の値は，調整済残差である。

2 不詳を除く。

3 「P値」は，モンテカルロ法による。

4 「判定」欄の，「**」は，有意水準1％以下で，それぞれ有意差が見られることを示す。

残差分析の結果、濃い塗りつぶしは期待値より有意に多いこと、薄い塗りつぶしは有意に少ないことを示す(5％水準)。
## 才最終學歷（在學含む）

1％以下の水準で有意な関連が見られた $ (\chi^{2}(15)=946.638,\ p<0.000) $ 。初等及び特別では「中学校」が有意に多く，中等では「高等学校」及び「高等専門学校」が有意に多い。

## 力 保護者の職業

保護者の職業の有無については，1％以下の水準で有意な関連が見られた $ (\chi^{2}(3)=33.638,\mathrm{p}<0.000) $ 。中等は「有職」が，特別及び医療は「無職」が有意に多い。生活程度についても，初等，特別及び医療は「貧困」が，中等は「普通」が有意に多い。父への態度では，初等は「拒否」，「畏怖・恐怖」及び「両価」が，中等は「親和・信頼」が，特別は「両価」が，医療は「拒否」が有意に多い。母への態度では，初等は「畏怖・恐怖」及び「両価」が，中等は「親和・信頼」が，特別は「両価」が，医療は「拒否」，「攻撃・反抗」，及び「両価」が有意に多い。

上述の分析結果から，少年院の種別と有意な関連をもつデータ・フィールドは，以下のものである。

非行種別	最終学歴
不良集団関係	保護者の職業
薬物使用歴	生活程度
居住状況	保護者に対する態度

この種の分析結果は，それぞれの施設が受け入れる対象少年のニーズ及びレディネスを認識・把握する上では貴重な情報であり，矯正処遇の一層の充実・強化を図っていくためにも，継続的でより精密な分析が求められる。

次に，前章で行った成行き調査の結果を踏まえ，成行きに影響を与える因子の洗い出しを試みた。

## ２ 少年院出院者の成行き調査

## (1) 成行き調査の統計処理方法

平成9年4月1日から同年8月末までの間に少年院を出院した少年について，出院後3年以内の再入の有無をWANデータを使用して調査（出院後に，再び，少年鑑別所，拘置所，刑務所等の矯正施設に入所した者を抽出する。）し，再入の事実が判明した少年600人及び再入していなかった少年600人を無作為抽出し，この1200人について，WANデータ上にあるフィールド項目との関連を分析した。結果は後述するとおりである。なお，図15～17のとおり，統計上処理を行う必要上，2グループに分けられた「入出院」データに，「入院統計」データ又は「鑑別統計」データを連結するという作業を行った。

連結に当たって，キーとしたのは，施設のコード番号等であるが，膨大なデータ群から所要のデータだけを抽出するという作業にも Tsearch 関数を利用したシステムが大いに役立った。
図15 成行き調査システムの概要

抽出したデータを連結する
図16 出所データの選別システムのフローチャート
図17 再入所確認及び出所一再入所連結システムのフローチャート
## (2) 出院者の成行きとそれ以外のフィールドとの関連

## ア 非行の種別

表 8 は，再入の有無別に本件非行の種類をみたものである。再入群と非再入群の間には有意な差が認められた $ \chi^{2}(28)=96.899,\ p<0.000 $ 。残差分析によると，再入群は，窃盗，公務執行妨害の比率が高い。

表 8 本件非行と再入の有無

再入有無	合計
再入なし	再入
公務執行妨害	00.0%[-2.0]	4100.0%[2.0]	4100.0%
放火	888.9%[2.3]	111.1%[−2.3]	9100.0%
住居侵入	133.3%[−0.6]	266.7%[0.6]	3100.0%
わいせつわいせつ文書	00.0%[−1.0]	1100.0%[1.0]	1100.0%
強制わいせつ同致死傷	850.0%[0.0]	850.0%[0.0]	16100.0%
強姦同致死傷	2573.5%[2.8]	926.5%[−2.8]	34100.0%
殺人	5100.0%[2.2]	00.0%[−2.2]	5100.0%
傷害	7056.9%[1.6]	5343.1%[−1.6]	123100.0%
傷害致死	2187.5%[3.7]	312.5%[−3.7]	24100.0%
暴行	350.0%[0.0]	350.0%[0.0]	6100.0%
業務上過失致死傷	1285.7%[2.7]	214.3%[−2.7]	14100.0%
窃盗	14936.3%[−6.9]	26263.7%[6.9]	411100.0%
強盗	1763.0%[1.4]	1037.0%[−1.4]	27100.0%
強盜致死傷	4464.7%[2.5]	2435.3%[−2.5]	68100.0%
再入有無	合計
再入なし	再入
強盗強姦同致死	1100.0% [1.0]	00.0% [-1.0]	1100.0%
詐欺	466.7% [0.8]	233.3% [-0.8]	6100.0%
恐喝	4448.9% [-0.2]	4651.1% [0.2]	90100.0%
横領·背任	1100.0% [1.0]	00.0% [-1.0]	1100.0%
暴力行為等処罰に関する法律	562.5% [0.7]	337.5% [-0.7]	8100.0%
その他の刑法犯	1055.6% [0.5]	844.4% [-0.5]	18100.0%
銃刀法	375.0% [1.0]	125.0% [-1.0]	4100.0%
売春防止法	00.0% [-1.0]	1100.0% [1.0]	1100.0%
児童福祉法	1100.0% [1.0]	00.0% [-1.0]	1100.0%
麻薬及び向精神薬取締法	00.0% [-1.0]	1100.0% [1.0]	1100.0%
覚せい剤取締法	5147.2% [-0.6]	5752.8% [0.6]	108100.0%
道路交通法	8358.0% [2.0]	6042.0% [-4.1]	143100.0%
毒劇法	1645.7% [-0.5]	1954.3% [0.5]	35100.0%
その他の特別法反	150.0% [0.0]	150.0% [0.0]	2100.0%
ぐ犯	1747.2% [-0.3]	1952.8% [0.3]	36100.0%
合計	60050.0%	60050.0%	1,200100.0%

注 1 2 段目の百分比は構成比，[ ] 内の値は調整残差である。

2 濃い塗りつぶしは,再入群で有意に高い本件非行の種類を示す。
## 性別

表 9 は，男女別に再入群，非再入群の占める比率をみたものである。

女子の方が，男子に比べて非再入群の占める比率が高く，有意な差が認められる。

表9 性别と再入の有無

性別	再入の有無	合計	x²值
非再入群	再入群
女	72(69.2)	32(30.8)	104(100.0)	**16.844
男	528(48.2)	568(51.8)	1,096(100.0)
合計	600(50.0)	600(50.0)	1,200(100.0)

注 1 （）内は，構成比である。

2 「判定」欄の，「**」は，有意水準1％以下で有意差が見られることを示す。

## ウ 保護観察歴

表10は，保護観察歴を再入の有無別にみたものである。

非再入群は，再入群に比べ，保護観察歴のない者の比率が高く，有意な差が認められる。

表10 保護観察歴と再入の有無

保護観察歴	再入の有無	合計	x²值
非再入群	再入群
なし	300(53.6)2.3	260(46.4)-2.3	560(100.0)	*9.418
1回	252(48.6)-0.9	267(51.4)0.9	519(100.0)
2回	42(41.6)-1.8	59(58.4)1.8	101(100.0)
3回以上	4(26.7)-1.8	11(73.3)1.8	15(100.0)
合計	598(50.0)	597(50.0)	1,195(100.0)

注 1 （）内は，構成比，（）の下の値は，調整済残差である。

2 不詳を除く。

3 「判定」欄の，「*」は，有意水準5％以下で有意差が見られることを示す。

4 残差分析の結果，濃い塗りつぶしは期待値より有意に多いこと，薄い塗りつぶしは有意に少ないことを示す（5％水準）。
## 工児童自立支援施設・児童養護施設送致歷

表11は，児童自立支援施設・児童養護施設送致歴を再入の有無別にみたものである。

非再入群は送致歴のない者の比率が，再入群は送致歴のある者の比率がそれぞれ高く，有意な差が認められる。

表11 児童自立支援施設・児童養護施設送致歴と再入の有無

児童自立支援施設·児童養護施設送致歷	再入の有無	合計	x²值
非再入群	再入群
なし	566(52.7)5.4	508(47.3)-5.4	1,074(100.0)	**30.795
1回	31(28.4)-4.7	78(71.6)4.7	109(100.0)
2回	1(10.0)-2.5	9(90.9)2.5	10(100.0)
3回以上	- (0.0)-1.0	1(100.0)1.0	1(100.0)
合計	598(50.1)	596(49.9)	1,194(100.0)

注 1 （）内は，構成比，（）の下の値は，調整済残差である。

2 不詳を除く。

3 「判定」欄の，「**」は，有意水準1％以下で有意差が見られることを示す。

4 残差分析の結果, 濃い塗りつぶしは期待値より有意に多いこと, 薄い塗りつぶしは有意に少ないことを示す。

5 平成10年までの教護院・養護施設送致を含む。
## 才 少年院入院歷

表12は，本件少年院入院前の少年院入院歴を再入の有無別にみたものである。

非再入群は，入院歴のない者すなわち初入者の占める比率が高く，再入群は，本件入院前に2回以上少年院を経験しているものの比率が高く，有意な差が認められる。

表12 少年院入院歴と再入の有無

少年院歷	再入の有無	合計	x²值
非再入群	再入群
初 入	532(52.9)4.5	474(47.1)-4.5	1,006(100.0)	**25.004
2 回	64(37.9)-3.4	105(62.1)3.4	169(100.0)
3 回	3(14.3)-3.3	18(85.7)3.3	21(100.0)
4 回以上	- (0.0)-1.0	1(100.0)1.0	1(100.0)
合 計	599(50.0)	598(50.0)	1,197(100.0)

注 1 （）内は，構成比，（）の下の値は，調整済残差である。

2 不詳を除く。

3 「判定」欄の，「**」は，有意水準1％以下で有意差が見られることを示す。

4 残差分析の結果，濃い塗りつぶしは期待値より有意に多いこと，薄い塗りつぶしは有意に少ないことを示す。