速度チェックを実行する

ユーザーまたはエンティティ (クレジット カードなど) からのイベントの頻度は、疑わしいアクティビティと潜在的な不正行為を示している可能性があります。 たとえば、詐欺師が個々の注文をいくつか試した後、多くの場合、1 つのクレジット カードを使用して、1 つの IP アドレスまたはデバイスから多数の注文をすばやく行います。 また、多くの異なるクレジット カードを使用して、多数の注文をすばやく行うこともできます。 速度チェックは、これらの種類のイベント パターンを識別するのに役立ちます。 速度を定義することで、これらの種類のパターンの受信イベントを監視し、ルールを使用して、パターンを疑わしいものとして扱うしきい値を定義できます。

Microsoft Dynamics 365 Fraud Protection のインスタンスに複数の環境がある場合は、環境スイッチャーを使用して、特定の環境で速度セットを定義できます。 ベロシティは、対応する環境で定義されているルールでのみ参照できます。 親環境でベロシティが作成され、ルールが同じ環境で定義されている場合、親レベルのルールの実行時に子環境のトランザクションが速度に含まれます。

ベロシティを定義する

速度セットは、個々の速度で構成されます。 Dynamics 365 Fraud Protection では、次の構造の Standard Edition LECT、FROMWHEN、GROUPBY キーワード (keyword)を使用して速度を定義します。

SELECT <aggregation method> AS <velocity name>
FROM <event type>
WHEN <condition>
GROUPBY <attribute name>

Note

速度定義で GROUPBY に配列を使用することはできません。

  • Standard Edition LECT の後に、集計方法として Count、DistinctCountまたは Sum を指定します 次に、AS キーワード (keyword)を使用して速度に名前を付けます。 この名前を使用して、ルール内の速度を参照できます。

    集計方法の説明を次に示します。

    集計方法 説明
    カウント このメソッドは、イベントが発生した回数を返します。 Standard Edition LECT Count() AS numPurchases
    DistinctCount このメソッドは、指定したプロパティの個別の値の数を返します。 指定したプロパティが受信イベントに対して null または空の場合、イベントは集計に影響しません。 Standard Edition LECT DistinctCount(@"device.ipAddress") AS distinctIPaddresses
    SUM このメソッドは、指定した数値プロパティの値の合計を返します。 Standard Edition LECT Sum(@"totalAmount") AS totalSpending
  • FROM の後に、速度を観察する評価イベントまたは観測イベントを指定します。 速度を監視するフィールド (またはグループ化するフィールド) は、API 呼び出しの一部である必要があります。 イベント間の速度を観察するには、評価または観測イベント間で複数のイベントを指定します。

  • WHEN ステートメントは省略可能です。 WHEN のに、ブール式を入力できます。 集計では、条件に一致するイベントのみが考慮されます。 その他のイベントは無視されます。 式は、速度で考慮されるイベントをフィルター処理するために使用されます。

  • GROUPBY の後に、プロパティまたは式を指定します。 その後、処理されるすべてのイベントに対してプロパティまたは式が評価されます。 GROUPBY ステートメントで同じ値に評価されるすべてのイベントが結合され、Standard Edition LECT ステートメントで指定された集計が計算されます。 受信イベントに対して GROUPBY 式が null または空の場合、イベントは集計に影響しません。

ヒント

ルールで使用できる式は、ベロシティでも使用できます。 これらの式には、リストと外部呼び出しが含まれます。 使用可能な関数の完全な一覧については、言語リファレンス ガイド参照してください。

Note

速度を監視する時間枠は、速度定義自体で指定されていません。 代わりに、ルールから速度を参照するときに指定します。

ベロシティの例

独自のベロシティを作成するには、次の例を使用します。

各ユーザーが費やした金額

SELECT Sum(@"totalAmount") AS totalSpending_perUser
FROM Purchase
GROUPBY @"user.userId"

新しいアカウントの作成に各 IP アドレスが使用された回数

SELECT Count() AS NewAccounts_perIP
FROM AccountCreation
GROUPBY @"device.ipAddress"

デバイスごとに、サインインした一意のユーザーの数

SELECT DistinctCount(@"user.userId") AS uniqueUserLogins_perDevice
FROM AccountLogin
GROUPBY @"deviceAttributes.deviceId"

各ユーザーについて、不正アクセス防止によって拒否された、または高リスク スコアを受け取ったサインイン試行の数

SELECT Count() AS loginRejections_perUser
FROM AccountLogin
WHEN @"ruleEvaluation.decision" == "Reject" or @"riskScore" > 900
GROUPBY @"user.userId"

ユーザーごとに、米国外で行われた購入の数と、リスクの高いリストに含まれている製品の数

SELECT Count() AS intlHighRiskTxns_perUser
FROM Purchase
WHEN @"user.country" != "US" and ContainsKey("Risky Products", "Product ID", @"ProductList.productId")
GROUPBY @"user.userId

各ユーザーについて、評価イベントと監視イベント全体で使用された一意のカスタム 電子メールの数

SELECT DistinctCount(@"custom.email") AS uniqueEmails_perUser
FROM Assessment_A1, Assessment_A1:status
GROUPBY @"custom.userId"

ベロシティ セットを作成する

  1. 不正アクセス防止ポータルの左側のナビゲーションで、[ベロシティ] を選択し、[新しい速度セット] を選択します。

    Fraud Protection では、自分 (作成者) にのみ表示されるドラフトベロシティ セットが作成されます。 下書きに加えたすべての変更が自動的に保存されることに注意してください。

  2. 省略可能: [条件] フィールドにブール条件を入力します。 または、フィールドを空白のままにします。

    集計では、この条件に一致するイベントのみが考慮されます。 その他のイベントは無視されます。 たとえば、米国で発生したイベントのみを集計するようにベロシティ セット内のベロシティを設定する場合は、次の条件を定義します。

    WHEN @"user.countryRegion" == "US"

  3. 新しいベロシティをゼロから定義するには、[新しいベロシティ] を選択します。 速度を定義する方法については、この記事で前述した「速度定義」セクションを参照してください。

    既存のベロシティ テンプレートから開始するには、[新しい速度] の右側にある矢印を選択します。 既存のテンプレートとその内容の完全な一覧を表示するには、[すべて表示] を選択します

    セットに最大 10 個のベロシティを追加できます。

  4. ベロシティを公開するには、[発行] を選択します

  5. 確認ダイアログ ボックスでは、ベロシティの名前、説明、または状態を変更できます。 準備ができたら、[発行] を選択します

ベロシティが公開されると、ベロシティ セット内のベロシティがすべてのユーザーに表示されます。 不正アクセス防止を通じてイベントが流れるにつれて、速度はデータの集計を開始します。

Note

ベロシティが発行されると、その時点からデータの集計が開始されます。 履歴データは考慮されません。

ベロシティを使用して決定する方法については、この記事の後半の「ルールでベロシティを使用する」セクションを参照してください

[サンプル] ウィンドウについて

ベロシティ セットを作成または編集すると、 ページの右側に [サンプル ] ペインが表示されます。

  • [ サンプル ] ウィンドウには、ベロシティで参照できるすべてのイベント プロパティが表示されます。 これらのプロパティは、ベロシティが観察するイベントの種類によって異なります。 ウィンドウの上部にある [イベント] フィールドでイベントの種類を選択します。

  • ペイロードの サンプル セクションには、評価の要求 API で送信できるプロパティの例が含まれています。

  • エンリッチメント サンプル セクションには、最初の要求が送信された後に Fraud Protection によってイベントに追加されるプロパティの例が含まれています。 たとえば、これらのプロパティには、Fraud Protection のデバイス フィンガープリント ソリューションからの情報、および機械学習モデルからのリスクとボットスコアが含まれます。

    エンリッチメント サンプルには、決定、ルール名、トリガーされた句の名前など、ルール評価の情報も含まれています。 速度には、これらのプロパティのいずれかを使用できます。 アットマーク (@) を使用して参照します (例: @"user.firstName")。

システム定義 (既定) の速度

不正アクセス防止では、環境ごとに複数のシステム定義速度が作成されます。 たとえば、次の既定の速度を追加できます。

  • 既定 - 電子メールの速度
  • 既定値 - 支払い方法の速度
  • 既定値 - IP 速度
  • 既定値 - デバイス ID の速度

不正アクセス防止機能の中には、購入保護の検索結果ページなど、既定の速度に依存するものもあります。

システム定義のベロシティを編集または削除することはできません。 ただし、複製してから、複製を編集または削除することができます。

ベロシティ セットを管理する

  • 発行済みの既存のベロシティ セットを編集するには、ベロシティを選択し、[編集] を選択します

    公開されたベロシティの下書きが作成され、自分だけが表示されます。 下書きに加えたすべての変更が自動的に保存されます。

    変更を運用環境にプッシュする準備ができたら、[発行] を選択します。 以前に公開されたベロシティ セットは、変更内容で上書きされます。

    Note

    ベロシティに対して行った変更は、その時点から計算される値にのみ影響します。 以前のイベント データには影響しません。

  • 既存のベロシティ セットを削除するには、省略記号 (...) を選択し、[削除] を選択 します

    Note

    公開されたルールでベロシティ セットが参照されている場合、ベロシティ セットは削除できません。

  • ベロシティ セットの名前または説明を更新するには、省略記号 (...) を選択し、[名前の変更] を選択 します

  • ベロシティ セットの状態を変更するには、[アクティブ化] または [非アクティブ化] を選択します

    • アクティブとしてマークされているベロシティ セット内の速度は、新しいイベントが Fraud Protection に送り込まれると常に更新されます。
    • 非アクティブとしてマークされているベロシティ セット内のベロシティは更新されません。

ルールでベロシティを使用する

ベロシティを使用して受信評価イベントに関する決定を行うには、ルールでそれらを参照する必要があります。 たとえば、次の速度は速度セットの一部として定義されます。

SELECT Sum(@"totalAmount") AS totalSpending_perUser
FROM Purchase 
GROUPBY @"user.userId"
WHEN Velocity.totalSpending_perUser(@"user.userid", 7d) > 1000

ルールでは、次の構文を使用して速度チェックを行うことができます。

WHEN Velocity.totalSpending_perUser(@"user.userid", 7d) > 1000

最初のパラメーターはキーです。 このパラメーターは、速度を検索するために使用されます。 上記の totalSpending のベロシティ定義では、GROUPBY\@"user.userId"ステートメントは、検出された各ユーザー ID に対して値が集計されることを示しています。 ルールから速度を参照する場合、キー パラメーターは速度値を取得するユーザー ID を指定します。 キー パラメーターが null または空の場合、Fraud Protection は 0 を返します

2 番目のパラメーターは timeWindow です。 このパラメーターは、速度を監視する時間枠を指定します。 1 秒から 90 日の時間枠を選択できます。 現在、有効な時間枠は次のとおりです。

  • [1 ~ 59]s
  • [1 ~ 59]m
  • [1 – 23]h
  • [1 – 90]d

Note

時間枠は、前の測定単位の開始時に開始されます。 たとえば、現在の日付と時刻が 2021 年 4 月 1 日の午前 11 時 4 分で、2 時間 (2 時間) の時間枠の速度をチェック場合、午前 9 時 4 分以降ではなく、午前 9 時以降のデータが表示されます。

速度がエラーのために値を返さなければ、既定値の 0 が返され、ルールは引き続き実行されます。

速度は、ルールの評価後に現在のイベントで更新されます。 したがって、ルール内のベロシティを参照する場合、処理中の現在のイベントは含まれません。

速度は、Functions から呼び出すこともできます。 詳細については、「関数」を参照してください。

ルールを使用して速度値を表示する

ルールでは、決定を返すだけでなく、Output() などの監視関数を使用して、特定の値を API 応答に出力できます。 たとえば、ユーザーは次の句を記述できます。これは決定を下すのではなく、API 応答で複数の速度の値を出力するだけです。

OBSERVE Output(
    totalSpending_7d = Velocity.totalSpending_perUser(@"user.userid", 7d),
    loginsPerDevice_1m = Velocity.loginCount_perDevice(@"deviceAttributes.deviceId", 1m)
)

このルールをトリガーする各評価イベントは、API 応答に次のセクションを出力します。

"MerchantRuleOutput": {
    "clause1": {
        "totalSpending_7d": "523.99",
        "loginsPerDevice_1m": "1"
    }
},

速度値を API 応答に直接出力する代わりに、イベント トレースを使用して、Azure Event Hubs または Azure Blob Storage の独自のインスタンスに値を送信できます。 たとえば、次の規則を作成します。

RETURN Approve(), Trace(
    totalSpending_7d = Velocity.totalSpending_perUser(@"user.userid", 7d),
    loginsPerDevice_1m = Velocity.loginCount_perDevice(@"deviceAttributes.deviceId", 1m)
)

FraudProtection.Trace.Rule イベントサブスクライブすると、次の情報が各イベントの一部として送信されます。

"attributes": {
    "totalSpending_7d": 523.99
    "loginsPerDevice_1m": 1
}

その他のリソース