回答の検証
データ品質を確保する方法の一つは、フォームのデータフィールドに制約を追加することです。制約はユーザーが無効または不可能な回答を入力するのを防ぎます。例えば、収入を尋ねるとき、負の数や極端に高い値などの非現実的な値を避けたいものです。フォームにデータ制約を追加するのは簡単です。以下の手順に従ってください:
- フォームに「constraint」という新しい列を追加する。
- 「constraint」列に回答の制限を指定する数式を入力する。
例
収入に制約を追加する例を考えてみましょう。制約では収入が$0から$1,000,000の間である必要があります。制約の設定方法は以下の通りです:
name | constraint |
|---|---|
| Income | . >= 0 & . <= 1000000 |
上の例では、数式の「.」は質問変数を参照し、「Income」質問に対してユーザーが入力した値を表します。制約「. >= 0 && . <= 1000000」は入力された収入が0以上で1,000,000以下であることを確保します。
ハード制約
ハード制約は、入力された値が式を満たさない場合にフォームの送信を完全にブロックします。調査員は有効な値を入力するまで先に進めません。
ハード制約を追加するには、constraint列に式を入力します。オプションでconstraint_messageに人間が読めるメッセージを追加できます:
type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| integer | age | 回答者の年齢 | . > 0 and . <= 120 | 年齢は1から120の間でなければなりません |
| decimal | temperature | 体温(°C) | . >= 35 and . <= 42 | 体温は35°Cから42°Cの間でなければなりません |
| text | phone | 電話番号 | regex(., '^[0-9]{10}$') | 10桁の電話番号を入力してください |
複数の条件
and/orで条件を組み合わせる:
. >= 0 and . <= 100
. = 'yes' or . = 'no'
パターン検証にregex()を使う
regex(value, pattern)関数は値を正規表現に対してテストします:
type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| text | メールアドレス | regex(., '^[^@]+@[^@]+\.[^@]+$') | 有効なメールアドレスを入力してください | |
| text | zip_code | 郵便番号 | regex(., '^[0-9]{5}$') | 5桁の郵便番号を入力してください |
制約で他のフィールドを参照する
${fieldname}を使って他の質問の値を参照する:
type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| integer | end_year | 終了年 | . >= ${start_year} | 終了年は開始年以降でなければなりません |
| decimal | loan_repaid | 返済額 | . <= ${loan_amount} | ローン額を超えて返済することはできません |
ソフトアラート
ソフトアラート(ソフト制約または警告とも呼ばれる)は、値が異常に見えることを調査員に警告しますが、それでも続行を許可します。これは値が技術的に有効だが統計的に可能性が低い場合に有用です。
最も一般的なパターンは、疑わしい値にフラグを立てるrelevant式を持つnoteを使い、確認のためのacknowledge質問と組み合わせることです:
type | name | label | relevant |
|---|---|---|---|
| integer | children | 子供の数 | |
| note | children_warning | 警告:${children}人の子供と入力しました。これが正しいことを確認してください。 | . > 15 |
| trigger | children_confirm | 子供の数が正しいことを確認してください | ${children} > 15 |
constraint_messageのみを使ったソフトアラート
より簡単なソフト警告には、極端な値に警告するが広い範囲を許可するように制約を記述できます:
type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| integer | children | 子供の数 | . >= 0 and . <= 30 | この値は非常に高いように思えます。確認してください。 |
ハード制約とソフト制約の区別はデータ品質にとって重要です。論理的に不可能な値(負の年齢、100°C以上の体温)にはハード制約を使用してください。統計的に可能性が低いが不可能ではない値にはソフトアラートを使用してください — 正当なエッジケースをブロックしたくありません。