(57)【要約】  プロセッサおよび記憶装置を含む、アラートを生成するためのシステム。命令は動作を実行するための１つまたは複数のプロセッサを構成し、動作は、データストリームからイベントを受信し、イベントからキーを抽出し、抽出されたキーに基づいて、イベントを少なくとも１つのアカウントに関連付け、少なくとも１つのアカウントに関連付けられた状態変数を識別し、状態変数にイベントを累積することによって状態変数を更新し、イベントのタイムスタンプを状態変数に登録し、状態変数から期限切れイベントを破棄することを含む。動作はまた、状態変数がしきい値レベルを超えているかどうかを判定することと、状態変数がしきい値レベルを超えたときにアカウントのアラートを生成することと、を含むことができる。
2021530798.tif 000002
【特許請求の範囲】
【請求項１】
アラートを生成するためのシステムであって、
前記システムは、
１つまたは複数のプロセッサと、
実行されると、動作を実行するように前記１つまたは複数のプロセッサを構成する命令を格納する１つまたは複数の記憶装置と、
を含み、
前記動作は、
データストリームからトランザクション情報を含むイベントを受信することと、
予め定義された選択されたトピックのグループに基づいて、前記イベントからキーを抽出することと、
前記抽出されたキーに基づいて、前記イベントを少なくとも１つのアカウントに関連付けることと、
前記少なくとも１つのアカウントに関連する状態変数を識別し、前記状態変数は、一定の時間複雑度でアクセスされるように構成されることと、
前記状態変数を更新することと、
を含み、
前記状態変数を更新することは、
前記状態変数に前記イベントを蓄積することと、
前記イベントのタイムスタンプを前記状態変数に登録することと、
前記状態変数から期限切れイベントを破棄することと、
によって行われ、
前記動作は、さらに、
前記状態変数がしきい値レベルを超えているかどうかを判定することと、
前記状態変数が前記しきい値レベルを超えたときに前記アカウントのアラートを生成することと、
を含む、システム。
【請求項２】
前記イベントを前記少なくとも１つのアカウントに関連付けることは、
非リレーショナルデータベースから、キーをアカウントに関連付けるルックアップテーブルを取得することと、
前記抽出された１つまたは複数のキーに相関する前記ルックアップテーブル内のアカウントを識別することと、
を含む、請求項１に記載のシステム。
【請求項３】
前記動作は、状態変数の有効期限のタイムウィンドウを決定することをさらに含み、
期限切れイベントを破棄することは、
前記状態変数に蓄積された既存のイベントのタイムスタンプを検索することと、
前記タイムウィンドウの下限より古いタイムスタンプを有する既存のイベントを削除することと、
を含む、請求項１に記載のシステム。
【請求項４】
前記状態変数の単一のコピーは単一のメモリユニットに格納され、
前記タイムウィンドウは２４時間である、請求項３に記載のシステム。
【請求項５】
前記動作は、
非リレーショナルデータベースから前記アカウントに関連する複数の状態変数を取得し、前記複数の状態変数の各々は、Ｏ（１）演算器でアクセスされるように構成されることと、
前記抽出されたキーに基づいて、各状態変数に重みを割り当てることと、
予測モデルを使用して不正行為の確率を計算し、前記予測モデルは、ランダムフォレストまたは畳み込みニューラルネットワークの少なくとも一方を含むことと、
不正行為の前記確率が確率しきい値を超えた場合にアラート信号を生成することと、
をさらに含む、請求項１に記載のシステム。
【請求項６】
前記動作は、前記イベントから値を抽出することをさらに含み、
前記抽出されたキーは、ＩＰアドレス、電子メールアドレス、または電話番号のうちの少なくとも１つを含み、
前記抽出された値はトランザクション値を含む、請求項５に記載のシステム。
【請求項７】
前記状態変数に前記イベントを蓄積することは、
前記トランザクション値に比例するスコアを前記イベントに割り当てることと、
前記割り当てられたスコアに基づいて前記状態変数の前記値を増加させることと、
を含む、請求項６に記載のシステム。
【請求項８】
前記動作は、
クライアントシステムとインターフェースするＡＰＩからトランザクション要求を受信することと、
前記トランザクション要求に関連するアカウントを識別することと、
前記アカウントに対してアラートが生成された場合に前記トランザクション要求を拒否することと、をさらに含む、請求項１に記載のシステム。
【請求項９】
データストリームからイベントを受信することは、複数のクライアントシステムから複数のイベントを受信することを含み、
前記イベントからキーを抽出することは、
１つまたは複数のストリームキャプチャアプリケーションを構成することと、
各キャプチャアプリケーションに１つまたは複数のブローカを割り当てることと、
各ブローカでイベント情報をＯ（１）演算器でアクセス可能な変数に変換するように定義することと、
を含む、請求項１に記載のシステム。
【請求項１０】
前記イベントを受信することは、
関連するイベントタイムを含まないイベントを識別することと、
関連するイベントタイムを有さないイベントを削除することと、
イベントタイムのタイムゾーンおよび前記イベントの通貨を正規化することにより、削除されていないイベントのイベント情報を正規化することと、
を含む、請求項１に記載のシステム。
【請求項１１】
アラートを生成するためのコンピュータ実施方法であって、
前記方法は、
データストリームからトランザクション情報を含むイベントを受信することと、
予め定義された選択されたトピックのグループに基づいて、前記イベントからキーを抽出することと、
前記抽出されたキーに基づいて、前記イベントを少なくとも１つのアカウントに関連付けることと、
前記少なくとも１つのアカウントに関連する状態変数を識別し、前記状態変数は、一定の時間複雑度でアクセスされるように構成されることと、
前記状態変数を更新することと、
を含み、
前記状態変数を更新することは、
前記イベントを前記状態変数に蓄積することと、
前記イベントのタイムスタンプを前記状態変数に登録することと、
前記状態変数から期限切れイベントを破棄することと、
によって行われ、
前記動作は、さらに、
前記状態変数がしきい値レベルを超えているかどうかを判定することと、
前記状態変数が前記しきい値レベルを超えたときに前記アカウントのアラートを生成することと、
を含む、方法。
【請求項１２】
前記イベントを前記少なくとも１つのアカウントに関連付けることは、
非リレーショナルデータベースから、キーをアカウントに関連付けるルックアップテーブルを取得することと、
前記抽出された１つまたは複数のキーに相関する前記ルックアップテーブル内のアカウントを識別することと、
を含む、請求項１１に記載の方法。
【請求項１３】
状態変数の有効期限のタイムウィンドウを決定することをさらに含み、
期限切れイベントを破棄することは、
前記状態変数に蓄積された既存のイベントのタイムスタンプを検索することと、
前記タイムウィンドウの下限より古いタイムスタンプを有する既存のイベントを削除することと、
を含む、請求項１１に記載の方法。
【請求項１４】
前記状態変数の単一のコピーは単一のメモリユニットに格納され、
前記タイムウィンドウは２４時間である、請求項１３に記載の方法。
【請求項１５】
前記動作は、
非リレーショナルデータベースから前記アカウントに関連する複数の状態変数を取得し、前記複数の状態変数の各々は、Ｏ（１）複雑度演算器でアクセスされるように構成されることと、
前記抽出されたキーに基づいて、各状態変数に重みを割り当てることと、
予測モデルを使用して不正行為の確率を計算し、前記予測モデルは、ランダムフォレストまたは畳み込みニューラルネットワークの少なくとも一方を含むことと、
不正行為の前記確率が確率しきい値を超えた場合にアラート信号を生成することと、
をさらに含む、請求項１１に記載の方法。
【請求項１６】
前記イベントに関連するトランザクション値を抽出することをさらに含み、
前記抽出されたキーは、ＩＰアドレス、電子メールアドレス、電話番号のうちの少なくとも１つを含む、請求項１５に記載の方法。
【請求項１７】
前記状態変数に前記イベントを蓄積することは、
前記トランザクション値に比例するスコアを前記イベントに割り当てることと、
前記割り当てられたスコアに基づいて前記状態変数の前記値を増加させることと、
を含む、請求項１６に記載の方法。
【請求項１８】
クライアントシステムとインターフェースするＡＰＩからトランザクション要求を受信することと、
前記トランザクション要求に関連するアカウントを識別することと、
前記アカウントに対してアラートが生成された場合に前記トランザクション要求を拒否することと、
をさらに含む、請求項１１に記載の方法。
【請求項１９】
データストリームからイベントを受信することは、複数のクライアントシステムから複数のイベントを受信することを含み、
前記イベントからキーおよび値のペアを抽出することは、
１つまたは複数のストリームキャプチャアプリケーションを構成することと、
各キャプチャアプリケーションに１つまたは複数のブローカを割り当てることと、
各ブローカでイベント情報をＯ（１）演算器でアクセス可能な変数に変換するように定義することと、
を含む、請求項１１に記載の方法。
【請求項２０】
プロセッサによって実行されると、トランザクションに基づいてリアルタイムアラートを生成する動作を実行する命令を格納する非一時的なコンピュータ可読媒体であって、
前記動作は、
複数のクライアントシステムから、複数のイベントを含むデータストリームを受信することと、
前記複数のイベントからタイムスタンプを含まないイベントを除去することと、
前記除去されていないイベントの各々のタイムゾーンおよび通貨を正規化することにより、正規化されたイベントの配列を生成することと、
前記正規化されたイベントから複数のキーをリアルタイムで抽出することであって、前記複数のキーは、ＩＰアドレス、電子メールアドレス、または電話番号を含むことと、
対応するキーに基づいて、前記正規化されたイベントを少なくとも１つのアカウントに関連付けることと、
対応するアカウントに関連する状態変数を識別し、前記状態変数は、Ｏ（１）複雑度演算器でアクセスされるように構成され、前記状態変数は単一のコピーに格納されることと、
前記状態変数を更新することと、
を含み、
前記状態変数を更新することは、
前記除去されていないイベントを前記状態変数に蓄積することと、
前記更新された状態変数の各々にタイマーおよびコールバックを登録することと、
前記状態変数から期限切れイベントを破棄し、前記期限切れイベントは、タイムウィンドウの外側にあるタイムスタンプ有することと、
によって行われ、
前記動作は、さらに、
アカウントに関連する更新された状態変数に重みを割り当てることと、
前記更新された変数に基づく予測モデルを使用して不正行為の確率を計算することと、
前記状態変数が前記しきい値レベルを超えたときに前記アカウントのアラートを生成することと、
を含む、非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、リアルタイムデータストリーム処理のためのシステムおよび方法、より具体的には、必要なリソース、待ち時間、および／またはメモリ利用を最小化しながら、異常を識別するためにマルチソースデータストリームの過去の傾向を処理するためのシステムおよび方法に関する。
【背景技術】
【０００２】
一部のネットワークシステムでは、データストリーム内の異なるサーバー（またはドメイン）間でデータが交換され、データストリームは、頻繁にまたは継続的に送信されるデータパケットなどのデジタルエンコードされた信号のシーケンスであってもよい。データストリーム内の情報をリアルタイムで処理する（つまり、システムで利用可能になるとすぐにデータを処理する）ことで、新しい情報に迅速に対応し、遅滞なく対応することができる。言い換えれば、データストリームのリアルタイムデータ処理により、ネットワークシステムのユーザは、即時またはごく最近のデータに基づいて、洞察を得たり、結論を非常に迅速に引き出すことができる。
【０００３】
データストリームをリアルタイムで処理する機能は、いくつかのアプリケーションで役立つ。例えば、患者の健康状態を監視するシステムは、診断データをリアルタイムで監視および処理することにより、患者の状態に関する重要な洞察を得ることができる。また、データサーバーは、クライアント要求をリアルタイムで監視することにより、データストリーム内の異常を捕捉して、ＤＯＳ攻撃などの攻撃を特定することができる。同様に、データストリームをリアルタイムで処理することにより、クレジットカード会社またはオンライン小売業者は不正行為を識別して防止することができる。さらに、データストリームのリアルタイム処理は、顧客関係管理（ＣＲＭ）に役立つ。全体として、データストリームをリアルタイムで処理することにより、ネットワークのより厳密な制御が可能になり、より堅牢なシステムが作成され、即時の対応が必要なアプリケーションが可能になる。
【０００４】
しかし、データストリームをリアルタイムで処理するには、効果的な実施態様を制限する技術的な課題がある。特に、複数の情報プロバイダ、複数のデータストリーム、または非常に大量のデータを含むような複雑なシステムでは、データストリームのリアルタイム解析は、計算が複雑になり、リソースを大量に消費する可能性がある。例えば、リアルタイム処理システムは、高い利用可能性と低い応答時間を提供するという技術的な課題に直面している。また、リアルタイム処理システムは、大量のデータを処理するという課題に直面しており、いくつかのアプリケーションでは、１分あたり数テラバイトの情報の処理しながら、迅速に回答を返すことを要求している。さらに、リアルタイム処理システムの場合、データ形式が異なる複数のソースからデータを受信する可能性があるため、データの不一致という課題に直面する。
【０００５】
これらの技術的な課題や問題は、履歴データを調べて傾向を特定したり結論を推測したりするアプリケーションにおいて複雑になる。このようなアプリケーションでは、リアルタイムでデータを迅速に処理すると同時に、複雑なメモリ動作を管理して解析に必要な情報を取得し、解析後すぐに情報を保存するという課題に直面する。意味のある結論を出すには、メモリユニットの読み出しと書き込みをすばやく実行し、新しく処理された情報をすばやく保存し、現在の結論に必要な以前の情報を取得する機能を備えたリアルタイム処理システムが必要である。
【０００６】
リアルタイムデータストリーム処理を成功させるための技術的課題に取り組むために、システムは、処理要求に対処できる非常に堅牢なコンピューティング能力を備えた複雑で高価なハードウェアアーキテクチャを採用する場合がある。したがって、これらのプロセスの多くは、高い帯域幅と処理能力を備えた複雑なコンピュータクラスタまたはネットワークサービス用に確保されている。これらのシステムは、データをすばやく取得して保存するための複雑なメモリ管理システムでも構成されている。しかし、これらのリソースは維持に費用がかかり、すべてのアプリケーションで利用できるわけではない。
【０００７】
マルチメディアコンテンツをクライアントデバイスに提供するための開示されたシステムおよび方法は、上記の１つまたは複数の問題および／または従来技術における他の問題に対処する。
【０００８】
本明細書に組み込まれ、その一部を構成する添付の図面は、開示された実施形態を示し、説明と共に、開示された実施形態を説明するのに役立つ。
【図面の簡単な説明】
【０００９】
【図１】開示された実施形態と一致する、例示的なシステムのブロック図である。
【図２】開示された実施形態と一致する、例示的なストリーム演算器のブロック図である。
【図３】開示された実施形態と一致する、例示的なリアルタイム状態計算器のブロック図である。
【図４】開示された実施形態と一致する、例示的なクライアント要求インターフェースのブロック図である。
【図５】開示された実施形態と一致する、例示的なデータベースのブロック図である。
【図６】開示された実施形態と一致する、例示的なクライアントデバイスのブロック図である。
【図７】開示された実施形態と一致する、データストリーム処理フローを示す例示的なプロセスフロー図である。
【図８】開示された実施形態と一致する、アラート生成プロセスを示す例示的なフローチャートである。
【図９】開示された実施形態と一致する、多変数アラート生成プロセスを示す例示的なフローチャートである。
【図１０】開示された実施形態と一致する、クライアント要求プロセスへの応答を示す例示的なフローチャートである。
【図１１】開示された実施形態と一致する、ストリームキャプチャ構成プロセスを示す例示的なフローチャートである。
【図１２】開示された実施形態と一致する、予測モデル構成プロセスを示す例示的なフローチャートである。
【図１３】開示された実施形態と一致する、予測モデルトレーニングプロセスを示す例示的なフローチャートである。
【図１４Ａ】開示された実施形態による、時間の関数としての第１の例示的な状態変数の値の例示的なグラフである。
【図１４Ｂ】開示された実施形態による、時間の関数としての第２の例示的な状態変数の値の例示的なグラフである。
【図１４Ｃ】開示された実施形態による、時間の関数としての第３の例示的な状態変数の値の例示的なグラフである。
【図１５】開示された実施形態と一致する、パイプラインデータストリーム処理を示す例示的なプロセスフロー図である。
【図１６】開示された実施形態と一致する、トランザクションイベントに基づく状態変数の更新を示す例示的なプロセスフロー図である。
【図１７】開示された実施形態と一致する、注文イベントに基づく状態変数の更新を示す例示的なプロセスフロー図である。
【図１８】開示された実施形態と一致する、アラート処理を示す例示的なプロセスフロー図である。
【発明の概要】
【００１０】
本開示の一態様は、アラートを生成するためのシステムに向けられている。システムは、１つまたは複数のプロセッサと、命令を格納する１つまたは複数の記憶装置と、を含むことができる。実行されると、命令は、動作を実行するように１つまたは複数のプロセッサを構成することができる。動作は、データストリームからトランザクション情報を含むイベントを受信することと、予め定義された選択されたトピックのグループに基づいて、イベントからキーを抽出することと、抽出されたキーに基づいて、イベントを少なくとも１つのアカウントに関連付けることと、少なくとも１つのアカウントに関連する状態変数を識別し、状態変数は、一定の時間複雑度でアクセス可能なように構成されることと、を含むことができる。さらに、命令は、状態変数を、状態変数にイベントを蓄積し、イベントのタイムスタンプを状態変数に登録し、状態変数から期限切れイベントを破棄することによって、更新することと、状態変数がしきい値レベルを超えているかどうかを判定することと、状態変数がしきい値レベルを超えたときにアカウントのアラートを生成すること、の動作を含むことができる。
【００１１】
本開示の別の態様は、アラートを生成するためのコンピュータ実施方法に向けられている。本方法は、データストリームからトランザクション情報を含むイベントを受信することと、予め定義された選択されたトピックのグループに基づいて、イベントからキーを抽出することと、抽出されたキーに基づいて、イベントを少なくとも１つのアカウントに関連付けることと、少なくとも１つのアカウントに関連する状態変数を識別し、状態変数は、一定の時間複雑度でアクセス可能なように構成されることと、を含むことができる。本方法はまた、状態変数を、イベントを状態変数に蓄積し、イベントのタイムスタンプを状態変数に登録し、状態変数から期限切れイベントを破棄することによって、更新することを含むことができる。本方法はまた、状態変数がしきい値レベルを超えているかどうかを判定することと、状態変数がしきい値レベルを超えたときにアカウントのアラートを生成することと、を含むことができる。
【００１２】
本開示のさらに別の態様は、命令を格納する非一時的なコンピュータ可読媒体に向けられている。命令を実行すると、プロセッサは、トランザクションに基づいてリアルタイムアラートを生成する動作を実行し、動作は、複数のクライアントシステムから、複数のイベントを含むデータストリームを受信することと、複数のイベントからタイムスタンプを含まないイベントを除去することと、除去されていないイベントの各々のタイムゾーンおよび通貨を正規化することにより、正規化されたイベントの配列を生成することと、を含む。動作はまた、正規化されたイベントから複数のキーをリアルタイムで抽出し、複数のキーは、ＩＰアドレス、電子メールアドレス、または電話番号を含むことと、対応するキーに基づいて、正規化されたイベントを少なくとも１つのアカウントに関連付けることと、対応するアカウントに関連する状態変数を識別し、状態変数は、Ｏ（１）複雑度演算器でアクセスされるように構成され、状態変数は単一のコピーに格納されることと、状態変数を、除去されていないイベントを状態変数に蓄積し、更新された状態変数の各々にタイマーおよびコールバックを登録し、状態変数から期限切れイベントを破棄し、期限切れイベントは、タイムウィンドウの外側にあるタイムスタンプ有することによって、更新することと、アカウントに関連する更新された状態変数に重みを割り当てることと、更新された変数に基づく予測モデルを使用して不正行為の確率を計算することと、状態変数がしきい値レベルを超えたときにアカウントのアラートを生成することと、を含むことができる。
【発明を実施するための形態】
【００１３】
本開示は、一般に、待ち時間を最小化し、メモリ動作の数を減らすことができるデータストリームのリアルタイム処理のためのシステムおよび方法に向けられている。例えば、いくつかの実施形態では、開示されたシステムは、応答時間およびメモリ使用率を低減するために、複雑度の低い関数でアクセスされるように構成された蓄積状態変数を使用することができる。さらに、開示されたシステムおよび方法は、結論の精度を改善する予測モデルを使用して、過去の傾向および複数の関連するイベントを処理することができる。そのような実施形態では、複数の予測モデルは入力として複数の状態変数（複数の考慮事項をカバーする）を使用して、履歴データと複数のデータセットの両方に基づいてより正確な決定を取得することができる。例えば、電子決済の不正行為の検出に使用される場合、開示されたシステムは、複数の状態変数を使用して、トランザクション頻度、トランザクション金額、トランザクション場所、トランザクション業者、またはトランザクション通貨などの変数を独立して監視することができる。このように多様な考慮事項があるが、複雑度の低い動作に基づく迅速な対応により、不正行為の結論と計算は非常に正確になり得る。
【００１４】
さらに、開示されたシステムおよび方法は、リアルタイム処理性能を強化するために、絶対決定の代わりに差分計算を使用するインクリメンタルアーキテクチャを採用することができる。そのような実施形態では、差分計算を採用することにより、ハードウェア要件を低減し、応答の待ち時間を最小限に抑えることができる。例えば、開示されたシステムは、変数を独立して迅速に解析するために、単純な差分論理および並列化されたアーキテクチャで実装され得る。このような配置は、リアルタイムで効率的なデータ処理を容易にすることにより、コンピュータの動作と機能を向上させる。
【００１５】
さらに、開示されたシステムおよび方法は、各イベントを考慮するために必要な計算の数を制限することによって、リアルタイムデータストリーム処理のためのハードウェア要件を緩和することができる。例えば、データストリームの過去の傾向を考慮するために複数の計算を実行する代わりに、開示されたシステムおよび方法は、データストリームの各イベントに対して２つの計算のみを実行するように構成することができ、１つはイベントが発生したとき、もう１つはイベントが期限切れになったときである。差分アーキテクチャにより、開示されたシステムは、各イベントの計算数を制限し、システムの複雑度を軽減し、データストリームの監視に充てられるコンピュータリソースを最小限に抑えることができる。
【００１６】
あるいは、またはさらに、開示されたシステムおよび方法は、履歴情報に基づく連続計算を回避することによって計算要件を低減することができる。変数を絶えずまたは定期的に計算して予測を生成する代わりに、開示されたシステムおよび方法では、データストリーム内の関連するイベント（すなわち、トリガイベント）が受信されたときにのみ計算をトリガすることができる。イベントが受信されたときにのみ計算エンジンを使用するこのアプローチは、リソースを節約し、ハードウェアの使用に関連する技術的な問題を解決する。例えば、疑わしい行為または不正行為を特定することを目的とする実施形態は、コンピュータの使用率を低減するために、減衰関数および定期的な計算を適用する代わりに、トリガイベントを受信したときにのみ「ウェイクアップ」または関与するように構成され得る。さらに、リアルタイムで反応することができる動的状態変数を使用することによって、開示されたシステムおよび方法の計算は、メモリ使用率を最小限に抑えることができる。そのような実施形態では、開示されたシステムおよび方法は、イベントが受信されるかまたは期限切れになるとすぐに、変数を迅速に更新することができる。状態変数を更新するためのこのような配置は、スライディング間隔および定期的な計算に関連する動作を減らす可能性があるため、待ち時間を最小限に抑えることができる。
【００１７】
さらに、開示されたシステムおよび方法は、データストリームの複雑で長期的な解析を処理するのに非常に適している可能性がある。データストリームの過去の傾向を処理する場合、リアルタイム処理システムは、特に複雑な計算を必要とする長い過去の傾向の解析において、長い待ち時間またはパフォーマンスの問題に直面する可能性がある。しかし、開示されたシステムおよび方法では、複雑度が低く、アーキテクチャが異なる状態変数を使用することで、技術的な問題を解決できる可能性がある。リアルタイム解析に使用される変数と関数を構成して時間の複雑度を低くすると、解析された傾向に依存しない応答時間を有するシステムが得られる可能性がある。実際、開示されたシステムおよび方法のいくつかの実装では、変数および関数は、過去の傾向項に関係なく、処理要求への迅速な応答を決定する均一なＯ（１）複雑度を有するように構成され得る。したがって、開示された方法およびシステムのいくつかの実施形態では、状態変数のデータ構造を複雑度の低い演算器でアクセスできるように配置することにより、履歴解析の複雑度に関係なく、着信データストリームのイベントをわずか数ミリ秒で処理することができる。
【００１８】
開示されたシステムおよび方法のいくつかの実施形態はまた、処理されたデータを格納するために必要なハードウェアを最小化することによって、リアルタイムデータストリーム監視の技術分野を改善することができる。例えば、いくつかの実施形態では、開示された方法は、古いデータを除去しながら解析されたデータの単一のコピーを格納するように構成することができ、システムに必要なメモリ構造を単純化する。あるいは、またはさらに、開示されたシステムおよび方法は、リアルタイム処理用に調整されたメモリストレージアーキテクチャを使用することができる。例えば、開示されたシステムは、予測および／または将来の計算に必要な記憶空間を最小化しながら、記憶されたデータを効率的に処理するために、ファーストインおよびファーストアウトレジスタ、または同様のメモリ構造を含むことができる。さらに、開示されたシステムおよび方法のいくつかの実施形態では、データストリームに関連する計算および決定は、アクセス待ち時間およびメモリ使用率を最小化するために、単一の物理ディスクまたは仮想ディスクに格納され得る。
【００１９】
さらに、開示されたシステムおよび方法は、モデルを単純化し、メモリ使用率を低減するために時間ギャップが追跡されない実施形態を含むことができる。データストリームで解析された各イベントの時刻を追跡する代わりに、開示された方法では、時間減衰関数の時間ギャップは保存されず、むしろ、イベントとエントリ時刻のみが、バイナリ関数として、状態変数へのデータストリーム内のイベントの影響を考慮するかどうかに使用される。
【００２０】
さらに、開示されたシステムおよび方法は、オンライン実装とオフライン実装との間で一貫した結果を生成するように構成され得る。オフライン実装は、外部のネットワークまたはドメインに接続せずに、ローカルデバイスまたはシステム内で実行される。オフライン動作でのリアルタイムキャプチャ用のモデルおよび／またはプロトコルのテストまたは実装は、より簡素でより高速になり得る。例えば、オフラインの実装では、ユーザが解析またはイベントキャプチャモデルのトレーニング用のデータを完全に制御できるため、情報とデータフローの管理がより簡素になり得る。さらに、オフラインの実装では、ユーザは通常、ローカルシステム内で他のモジュールをすばやく統合および／または非アクティブ化することができる。しかし、オフライン実装はロックされている可能性があり、トレーニング済みモデルをエクスポートできない。さらに、オフライン実装では、ＳＱＬサービスなどの個別のストレージまたは処理機能を設定する必要がある。対照的に、オンライン実装はネットワーク化されたデバイスで実行され、システムはシステムの他の要素によって生成されたリアルタイムデータを組み込むことができる。例えば、オンライン実装は、リアルタイムのクライアント情報ストリームに接続されたクラウドサービスまたは「ライブ」システム内で実行することができる。オンライン実装は柔軟であり、ユーザは様々な種類のソフトウェアやトレーニング情報を試すことができる。オンライン実装では、専用のコンピュータハードウェアの要件がなくなる場合もある。オフライン実装とオンライン実装の間に一貫性があるため、開発者は実装に新しい特徴をシームレスに統合し、保護された環境で開発し、より高速な反復で問題を修正することができる。開示されたシステムおよび方法は、一貫したオフラインおよびオンライン移行を容易にすることができる。
【００２１】
例えば、開示されたシステムは、データストリームをオフラインおよびオンラインで解析するときに、同様の、または実質的に同様の結果を生成することができる。開示された方法は、オンラインアプリケーションでシームレスに使用できる予測モデルをオフラインで開発およびトレーニングするように構成可能であり得る。システムのオフライン動作とオンライン動作の間に一貫性があると、モデルの構築とモデルの実装が容易になり得る。開示されたシステムおよび方法が交換可能に実行されることにより、開示されたシステムおよび方法は、予測モデルのオフラインおよびオンライン性能の間の非互換性の技術的問題を解決する。
【００２２】
開示されたシステムおよび方法はまた、リアルタイムでマルチソース情報を処理することの技術的問題を解決することができる。例えば、開示されたシステムは、データが処理される前にデータを正規化する特定の場所またはデータ修飾子にフィルタを含むことができる。そのような実施形態では、開示された方法は、処理する必要がないか、またはユーザが必要とするカテゴリの外にあるイベントを識別するために、予めコード化されたフィルタによってデータストリームをスクリーニングすることを含むことができる。このようなフィルタは、後のリアルタイム処理を容易にするために、ドメインまたはサーバー間のインターフェースに配置され得る。
【００２３】
いくつかの実装形態では、開示されたシステムおよび方法は、自動化された電子決済の不正行為検出の技術分野を改善することができる。例えば、開示されたシステムおよび方法は、ユーザが短時間で高頻度トランザクションを実行するときにキャプチャするためのデータトランザクションを伴うデータストリームに適用可能であり得る。そのようなアプリケーションの場合、開示されたシステムおよび方法は、トランザクション情報をリアルタイムで処理し、トランザクションの頻度、発信元、および量を迅速かつ正確に計算することができる。さらに、そのようなアプリケーションの場合、開示されたシステムおよび方法は、異なるソースからのデータストリームに組み込むことができる安定したスケーラブルな解析のためのプラットフォームを提供することができる。
【００２４】
次に、開示された実施形態を詳細に参照し、その例を添付の図面に示す。
【００２５】
図１は、開示された実施形態と一致する、例示的なシステム１００のブロック図である。システム１００では、ストリーミングサービスまたはオンライン小売業者などのサービスプロバイダ（図示せず）は、データストリームをリアルタイムで処理して、例えば、異常な行為または疑わしい振る舞いを識別し、アラートを生成することができる。システム１００は、ストリーム演算器１１０、リアルタイム状態計算器１２０、およびクライアント要求インターフェース１３０を含むことができるサービスシステム１０５を含むことができる。システム１００は、オンラインリソース１４０、クライアントデバイス１５０、サードパーティシステム１６０、クライアントシステム１９０、およびデータベース１８０をさらに含むことができる。いくつかの実施形態では、図１に示すように、システム１００の構成要素は、ネットワーク１７０に接続され得る。しかし、他の実施形態では、システム１００の構成要素は、ネットワーク１７０なしで、互いに直接接続されてもよい。例えば、データベース１８０は、サービスシステム１０５に直接結合されてもよい。
【００２６】
オンラインリソース１４０は、ウェブサイトホスティング、ネットワーキング、クラウド、またはバックアップサービスのプロバイダなどのエンティティによって提供される１つまたは複数のサーバーまたはストレージサービスを含むことができる。いくつかの実施形態では、オンラインリソース１４０は、認証サービス、ドメインネームシステム（ＤＮＳ）、またはランディングページのためのウェブページを格納するホスティングサービスまたはサーバーに関連付けられ得る。他の実施形態では、オンラインリソース１４０は、クラウドコンピューティングサービスに関連付けられ得る。さらに他の実施形態では、オンラインリソース１４０は、例えば、アップルプッシュ通知サービス、Ａｚｕｒｅモバイルサービス、またはグーグルクラウドメッセージングなどのメッセージングサービスに関連付けることができる。そのような実施形態では、オンラインリソース１４０は、デジタル権利管理の処理など、開示された実施形態の機能に関連するメッセージおよび通知の配信を処理することができる。
【００２７】
クライアントデバイス１５０は、開示された実施形態と一致する１つまたは複数の動作を実行するように構成された１つまたは複数のコンピューティングデバイスを含むことができる。例えば、クライアントデバイス１５０は、デスクトップコンピュータ、ラップトップ、サーバー、モバイルデバイス（例えば、タブレット、スマートフォンなど）、セットトップボックス、ゲームデバイス、ウェアラブルコンピューティングデバイス、またはコンピューティングデバイスの他のタイプを含むことができる。クライアントデバイス１５０は、以下に説明する機能を実施するための動作を実行するために、クライアントデバイス１５０に含まれるメモリなどのメモリに格納されたソフトウェア命令を実行するように構成された１つまたは複数のプロセッサを含むことができる。クライアントデバイス１５０は、有線および／または無線通信用に構成することができ、プロセッサによって実行されると、インターネット関連通信（例えば、ＴＣＰ／ＩＰ）およびコンテンツ表示プロセスを実行するソフトウェアを含むことができる。例えば、クライアントデバイス１５０は、クライアントデバイス１５０に含まれるか、またはそれに接続されたディスプレイ装置上のコンテンツを含むインターフェースを生成および表示するブラウザソフトウェアを実行することができる。クライアントデバイス１５０は、クライアントデバイス１５０がネットワーク１７０を介して構成要素と通信することを可能にするアプリケーションを実行し、クライアントデバイス１５０に含まれるディスプレイ装置を介してインターフェースでコンテンツを生成および表示することができる。
【００２８】
いくつかの実施形態では、図６に関連してさらに開示するように、クライアントデバイス１５０は、サービスシステム１０５と相互作用するように特別に構成されたアプリケーションを実行することができる。さらに、クライアントデバイス１５０は、１つまたは複数のアカウントを格納することができる。例えば、クライアントデバイス１５０は、ユーザ識別、パスワード、場所、および電子決済情報を含む、ユーザアカウントに関する情報を格納することができる。
【００２９】
開示された実施形態は、クライアントデバイス１５０の特定の構成に限定されない。例えば、クライアントデバイス１５０は、モバイルアプリケーションを格納および実行して、サービスシステム１０５および／またはオンラインリソース１４０によって提供される機能を提供する動作を実行するモバイルデバイスであってもよい。特定の実施形態では、クライアントデバイス１５０は、ＧＰＳロケーションなどのロケーションサービスに関連するソフトウェア命令を実行するように構成され得る。例えば、クライアントデバイス１５０は、地理的位置を決定し、位置データおよび位置データに対応するタイムスタンプデータを提供するように構成され得る。クライアントデバイス１５０は、図６に関連してさらに説明される。
【００３０】
データベース１８０は、サービスシステム１０５、ストリーム演算器１１０、リアルタイム状態計算器１２０、および／またはクライアント要求インターフェース１３０にクライアントデバイス１５０とのトランザクションを実行するためのデータを提供することと一致する動作を実行するための適切なソフトウェアで構成された１つまたは複数のコンピューティングデバイスを含むことができる。データベース１８０は、例えば、Ｏｒａｃｌｅ（商標）データベース、Ｓｙｂａｓｅ（登録商標）データベース、または他のリレーショナルデータベース、またはＨａｄｏｏｐ（商標）シーケンスファイル、ＨＢａｓｅ（商標）、またはＣａｓｓａｎｄｒａ（商標）などの非リレーショナルデータベースを含むことができる。データベース１８０は、データベースのメモリデバイスに格納されたデータの要求を受信および処理し、データベースからデータを提供するように構成されたコンピューティング構成要素（例えば、データベース管理システム、データベースサーバーなど）を含むことができる。
【００３１】
データベース１８０は別々に示されているが、いくつかの実施形態では、データベース１８０は、サービスシステム１０５、ストリーム演算器１１０、リアルタイム状態計算器１２０、クライアント要求インターフェース１３０、およびオンラインリソース１４０のうちの１つまたは複数に含まれるか、そうでなければそれに関連することができる。
【００３２】
データベース１８０は、ユーザアカウントおよびユーザプリファレンスに関連するデータを収集および／または維持するように構成され得る。例えば、データベース１８０は、サービスシステム１０５のユーザのユーザプロファイルに関する情報を格納することができる。データベース１８０は、例えば、オンラインリソース１４０を含む様々なソースからデータを収集することができる。データベース１８０は、図５に関連して以下でさらに説明される。
【００３３】
サードパーティシステム１６０は、サービスのプロバイダまたはフルフィルメントセンターなどのサービスシステム１０５に関連するエンティティによって提供される１つまたは複数のサーバーまたはストレージサービスを含むことができる。サードパーティシステム１６０は、ネットワーク１７０を介してシステム１００に接続され得るが、他の実施形態では、サードパーティシステム１６０は、システム１００のいくつかの要素との直接接続を含むことができる。さらに、サードパーティシステム１６０は、サービスシステム１０５、またはシステム１００の他の要素からの情報を提供および／または要求するように構成され得る。いくつかの実施形態では、サードパーティシステム１６０もネットワーク１７０に結合され得るが、それらはサービスシステム１０５のクライアントでなくてもよい。代わりに、サードパーティシステム１６０は、サービスシステム１０５のユーザまたはクライアントの情報を含むシステムを含むことができる。例えば、サードパーティシステム１６０は、不正行為記録および／または不正アカウントの記録を備えた政府サーバーを含むことができ、これらは、サービスシステム１０５によって不正行為決定を行うために使用され得る。
【００３４】
クライアントシステム１９０は、ネットワーク１７０を介してサービスシステム１０５と通信する１つまたは複数のサーバーまたはストレージサービスを含むことができる。クライアントシステム１９０は、データストリームをサービスシステム１０５に供給し、サービスシステム１０５は、開示されたシステムおよび方法を使用してリアルタイムで処理することができる。例えば、クライアントシステム１９０は、クレジットカード承認要求および／または注文のイベントを伴うデータストリームを送信することができる。そのような実施形態では、クライアントシステム１９０から送信されるイベントは、ユーザ情報、場所、トランザクション金額、ＩＰアドレス、および／または通貨を含むことができる。さらに、クライアントシステム１９０は、ウィンドウズ（登録商標）、ｍａｃＯＳ（登録商標）、またはＬｉｎｕｘ（登録商標）オペレーティングシステムを動作させることができる。
【００３５】
クライアントシステム１９０は、異なる通信プロトコルを使用する複数の異なるシステムを含むことができる。例えば、クライアントシステム１９０は、異なる地理的位置にあるか、特定の通信チャネルおよび／またはポートを使用するか、あるいは異なる媒体を介して通信することができる。例えば、一部のクライアントシステム１９０はＴＣＰを使用し、他のクライアントシステム１９０はＵＤＰを使用する場合がある。したがって、いくつかの実施形態では、サービスシステム１０５は、データを識別して外れ値にし、正規化規則に従ってデータを正規化するためのフィルタおよびノーマライザを含むことができる。正規化規則は、イベントからのすべてのタイムスタンプをＧＭＴに変換すること、またはすべての金額情報を米ドルに変換することが含むことができる。さらに、いくつかの実施形態では、クライアントシステム１９０は、サービスシステム１０５から頻繁に情報を引き出すことができるアグリゲータウェブサイトまたは検索エンジンを含むことができる。あるいは、またはさらに、クライアントシステム１９０は、ｅコマースウェブサイトをホストすることができる。いくつかの実施形態では、クライアントシステム１９０は、クライアントデバイス１５０にサービスを提供することができる。他の実施形態では、クライアントシステム１９０およびクライアントデバイス１５０は、同じユーザによって動作されてもよく、地理的に同じ場所に配置されてもよい。さらに他の実施形態では、クライアントシステム１９０およびクライアントデバイス１５０は、互いに独立していてもよい。
【００３６】
一構成では、ストリーム演算器１１０は、例えば、クライアントシステム１９０から受信したデータストリームの処理と一致する動作を実行するように構成された１つまたは複数のコンピューティングシステムを含むことができる。いくつかの実施形態では、ストリーム演算器１１０は、クライアントシステム１９０および／またはクライアントデバイス１５０から発注または承認要求を受信することができる。例えば、クライアントシステム１９０は、購入トランザクションのための支払い情報をデータストリームに提供することができる。ストリーム演算器１１０は、データストリーム内のイベントをキャプチャし、フィルタリングし、解析し、結論を提供するためのインフラストラクチャおよび構成要素を提供することができる。そのような実施形態では、ストリーム演算器１１０は、トランザクションを検証／拒否するために、リアルタイムでデータストリームからキーおよび値を抽出することができる。さらに、ストリーム演算器１１０は、データストリーム内のイベントを解決して、それらをユーザアカウントおよび／またはユーザプリファレンスに関連付けることができる。
【００３７】
いくつかの実施形態では、ストリーム演算器１１０は、異常を決定し、および／または不正行為を検出するための予測モデルにおける入力として使用することができるデータ構造を生成することができる。例えば、ストリーム演算器１１０は、データストリーム内の異常なまたは稀なイベントの決定を行うために使用され得るキーと値のペアの２次元配列または行列にデータストリームを配置することができる。そのような実施形態では、図８に関連して以下でさらに説明するように、ストリーム演算器１１０は、データストリームからキーおよび値を抽出し、イベントキーに基づいてイベントに関連するアカウントを識別することができる。さらに、ストリーム演算器１１０は、データストリーム内のイベントのリアルタイムデータ処理を容易にするために、データストリーム内の情報に対してフィルタリングまたは正規化機能を実行することができる。ストリーム演算器１１０は、図２に関連してさらに説明される。
【００３８】
リアルタイム状態計算器１２０は、データストリーム内のイベントに関連する状態変数を決定または生成するように構成された１つまたは複数のコンピューティングシステムを含むことができる。図１４Ａ〜図１４Ｃに関連してさらに説明するように、状態変数は、定期的にまたはトリガイベントに基づいて更新されるように構成され得る。いくつかの実施形態では、リアルタイム状態計算器１２０によって生成された状態変数は、Ｏ（１）の複雑度を有する演算器でアクセス可能に構成され得る。例えば、状態変数は、入力サイズに関係なく一定時間で実行される演算器でアクセスできるように構成することができ、例えば、要素にアクセスするための演算器を備えた配列、プッシュおよびポップメソッドのための演算器を備えた固定サイズのスタック、ならびにエンキューおよびデキューメソッドのための演算器を備えた固定サイズのキューを含む。
【００３９】
いくつかの実施形態では、リアルタイム計算器１２０は、ストリーム演算器から情報を受信し、それをデータストリーム内の抽出されたキーまたは値に基づいて状態変数に関連付けることができる。例えば、ストリーム演算器１１０が、イベントが電話番号に関連することを識別した後に、リアルタイム計算器１２０は、電話番号に関連する１つまたは複数の状態変数を識別して、データを処理し、結論を出すことができる。
【００４０】
リアルタイム状態計算器１２０は、状態変数に対して累積および差分演算を実行するように構成され得る。さらに、リアルタイム状態計算器１２０は、変数の過去の傾向を決定するための規則を生成するように構成され得る。例えば、リアルタイム状態計算器１２０は、状態変数に影響を与えるイベントの有効期限規則を決定するように構成され得る。そのような実施形態では、リアルタイム状態計算器１２０は、２４時間より古いイベントはもはや状態変数に影響を及ぼさず、イベントの影響は２４時間後に排除され得ると決定することができる。さらに、リアルタイム状態計算器１２０はまた、アラートを生成するための規則を識別することができる。例えば、リアルタイム状態計算器１２０は、トランザクション数のしきい値を決定することができる。状態変数に格納されたトランザクション数がしきい値量を超える場合には、リアルタイム状態計算器１２０は、異常または潜在的に不正な行為のアラートを生成することができる。
【００４１】
リアルタイム状態計算器１２０はまた、状態変数にイベントを蓄積するためのハードウェアおよびソフトウェアを含むことができる。例えば、リアルタイム状態計算器１２０は、新しいイベントを追加するか、または期限切れイベントを削除することによって、状態変数を変更するための動作を実行することができる。いくつかの実施形態では、状態変数の変更は、着信イベントによってのみトリガされる。すなわち、リアルタイム状態計算器１２０は、計算コストおよびメモリ使用率を最小化するために、関連するイベントによってトリガされたときにのみ状態変数を変更するように構成され得る。
【００４２】
さらに、リアルタイム状態計算器１２０は、データストリームにおける不正または不規則な振る舞いを決定する予測モデルを生成および／または適用するように構成され得る。リアルタイム状態計算器１２０は、畳み込みニューラルネットワーク（ＣＮＮ）またはランダムフォレスト（ＲＦ）解析などの人工知能モデルを訓練して、データストリームの異常な振る舞いを識別することができる。いくつかの実施形態では、リアルタイム状態計算器１２０は、イベントに基づいてステータス変数を更新し、それらを、不規則な振る舞いの確率を返す可能性があるＣＮＮまたはＲＦモデルの入力として使用することができる。そのような実施形態では、リアルタイム状態計算器１２０は、モデルから生じる確率がしきい値確率を超えるときにアラートを生成することができる。
【００４３】
いくつかの実施形態では、リアルタイム状態計算器１２０は、サービスシステム１０５の動作中にメモリ動作を処理するためのハードウェアおよびソフトウェアを含むことができる。例えば、リアルタイム状態計算器１２０は、アカウントに関する情報と共に状態変数を格納する記憶装置を含むことができる。さらに、リアルタイム状態計算器１２０は、メモリ使用率を最小化するメモリ動作を実行するように構成され得る。例えば、リアルタイム状態計算器１２０は、重複した情報を排除するように、または追加情報のスペースを開くために破棄することができる無関係な記録を識別するように構成された記憶装置を含むことができる。リアルタイム状態計算器１２０は、図３に関連してさらに説明される。
【００４４】
クライアント要求インターフェース１３０は、ネットワーク１７０に接続された他のシステムの要求に応答するための動作を実行する１つまたは複数のコンピューティングシステムを含むことができる。例えば、クライアント要求インターフェース１３０は、クライアントシステム１９０がサービスシステム１０５と対話するために使用することができるアプリケーションプログラミングインターフェース（ＡＰＩ）のサポートを提供することができる。クライアント要求インターフェース１３０は、不正なまたは侵害されたアカウントに関連している場合のトランザクションを防ぐように構成され得る。クライアント要求インターフェース１３０はまた、クライアント要求を処理するためのハードウェアまたはソフトウェアを含むことができ、これは、承認、在庫要求、および／または発注を含むことができる。
【００４５】
いくつかの実施形態では、クライアント要求インターフェース１３０は、クライアントデバイス１５０またはクライアントシステム１９０の認証機能を実行するプロセッサを含むことができる。例えば、クライアント要求インターフェース１３０は、クライアントＩＤおよび／または安全なトークンに基づいて要求を識別することができ、次いで、それは、例えば、リアルタイム状態計算器１２０によって生成されるアラート通知と比較される。いくつかの実施形態では、クライアント要求インターフェース１３０は、コンテンツおよびパケットコンテンツを異なるフォーマットで符号化するように構成されたプロセッサを含むことができる。いくつかの実施形態では、クライアント要求インターフェース１３０は、複数の動作および／またはストリームを同時に処理するための複数のコアプロセッサを含むことができる。例えば、クライアント要求インターフェース１３０は、複数のクライアントデバイス１５０の要求を同時に処理するための並列処理ユニットを含むことができる。
【００４６】
いくつかの実施形態では、クライアント要求インターフェース１３０は、システム１００内の他のドメインからの特定の要求を、リアルタイムではなく、バッチで処理するように構成され得る。例えば、クライアントシステム１９０がアカウントのステータスを要求する場合には、クライアント要求インターフェース１３０は、格納された処理結果に基づいて問い合わせに応答するように構成され得る。しかし、この応答はリアルタイムで処理されなくてもよく、代わりに、状態変数を確認して予測モデルを実行するためのリソースが利用可能になったときに処理されてもよい。したがって、クライアント要求インターフェース１３０は、クライアント要求に応答するためにサービスシステム１０５内の他の要素の現在の容量および帯域幅を監視することができる管理要素を含むことができる。あるいは、またはさらに、クライアント要求インターフェース１３０は、クライアント要求を処理するための専用ハードウェアを含むことができる。例えば、クライアント要求インターフェース１３０は、プルクライアント要求を処理するように特別に構成された、単純リスクコンピュータ（ＳＲＣ）アーキテクチャ、または他の再構成可能なコンピューティングシステムを含むことができる。クライアント要求インターフェース１３０は、図４に関連してさらに説明される。
【００４７】
図１は、サービスシステム１０５の異なる構成要素としてのストリーム演算器１１０、リアルタイム状態計算器１２０、およびクライアント要求インターフェース１３０を示している。しかし、ストリーム演算器１１０、リアルタイム状態計算器１２０、およびクライアント要求インターフェース１３０のうちの１つまたは複数は、同じコンピューティングシステムに実装されてもよい。例えば、サービスシステム１０５のすべての要素は、異なる仮想化モジュールを有する単一のサーバーで具体化されてもよい。あるいは、サービスシステム１０５は、ストリーム演算器１１０、リアルタイム状態計算器１２０、およびクライアント要求インターフェース１３０の役割を実行するために、異なるモジュールを備えた分散コンピューティングフレームワークで具体化されてもよい。
【００４８】
ネットワーク１７０は、システム１００の構成要素間の通信を提供するように構成された任意のタイプのネットワークであってもよい。例えば、ネットワーク１７０は、インターネット、ローカルエリアネットワーク、近距離無線通信（ＮＦＣ）、光コードスキャナ、またはシステム１００の構成要素間の情報の送受信を可能にする他の適切な接続など、通信を提供し、情報を交換し、および／または情報の交換を容易にする任意のタイプのネットワーク（インフラストラクチャを含む）であってもよい。他の実施形態では、システム１００の１つまたは複数の構成要素は、専用の通信リンクを介して直接通信することができる。さらに他の実施形態では、ネットワーク１７０は、例えば１つまたは複数のネットワークを編成する複数のネットワークを含むことができる。
【００４９】
システム１００の機能的構成要素の構成および境界は、説明の便宜上、本明細書で定義されていることを理解されたい。指定された機能とその関係が適切に実行される限り、代替的な境界を定義することができる。代替案（本明細書に記載されているものの同等物、拡張、変形、偏差などを含む）が明らかになるであろう。そのような代替案は、開示された実施形態の範囲内にある。
【００５０】
図２は、開示された実施形態と一致する、例示的なストリーム演算器１１０（図１）のブロック図を示す。ストリーム演算器１１０は、通信デバイス２１０、ストリームメモリ２２０、ならびに１つまたは複数のストリームプロセッサ２３０を含むことができる。ストリームメモリ２２０は、ストリームプログラム２２２およびストリームデータ２２４を含むことができる。ストリームプロセッサ２３０は、フィルタ／ノーマライザ２３２、ブローカ２３４、コンパイラ２３６、およびタイマー２３８を含むことができる。
【００５１】
いくつかの実施形態では、ストリーム演算器１１０は、サーバー、汎用コンピュータ、メインフレームコンピュータ、またはこれらの構成要素の任意の組み合わせの形態をとることができる。他の実施形態では、ストリーム演算器１１０は、仮想マシンであってもよい。開示された実施形態と一致する他の実施態様も可能である。
【００５２】
通信デバイス２１０は、上記のデータベース１８０などの１つまたは複数のデータベース、ならびにシステム１００の他の要素と直接またはネットワーク１７０を介して通信するように構成され得る。特に、通信デバイス２１０は、クライアントシステム１９０およびクライアントデバイス１５０からデータストリームを受信するように構成され得る。さらに、通信デバイス２１０は、リアルタイム状態計算器１２０に情報を送信するときに対応する状態変数を決定するために、データベース１８０からユーザアカウント情報を受信するように、構成することができる。さらに、通信デバイス２１０は、例えば、リアルタイム状態計算器１２０およびクライアントデバイス１５０を含む他の構成要素とも通信するように構成され得る。例えば、通信デバイス２１０を介して、ストリーム演算器１１０は、データストリーム内のイベントのキーおよび値をリアルタイム状態計算器１２０に送信することができる。次に、受信したキーおよびイベントに基づいて、サービスシステム１０５は、異常な振る舞いを識別するために蓄積状態変数を更新することができる。
【００５３】
通信デバイス２１０は、例えば、通信デバイス２１０が、インターネットを介して通信するためのネットワークコントローラおよび／または無線アダプタなどの他の構成要素と通信および／または検出することを可能にする１つまたは複数のデジタルおよび／またはアナログデバイスを含むことができる。開示された実施形態と一致する他の実施態様も可能である。
【００５４】
ストリームメモリ２２０は、データストリームをリアルタイムで処理するためにストリームプロセッサ２３０によって使用される命令を格納するように構成された１つまたは複数の記憶装置を含むことができる。例えば、ストリームメモリ２２０は、ストリームプロセッサ２３０によって実行されたときに動作を実行することができるストリームプログラム２２２などのソフトウェア命令を格納することができる。開示された実施形態は、専用のタスクを実行するように構成された別個のプログラムまたはコンピュータに限定されない。例えば、ストリームメモリ２２０は、ストリーム演算器１１０の機能を実行する単一のストリームプログラム２２２を含むことができ、またはストリームプログラム２２２は複数のプログラムを含むことができる。ストリームメモリ２２０はまた、処理されたストリームから抽出されたキーと値、および／または過去の傾向を解析するために以前に抽出された情報を格納するために使用されるストリームデータ２２４を格納することができる。例えば、ストリームデータ２２４は、以前に抽出されたアカウント情報のコピーを含むことができる。
【００５５】
特定の実施形態では、ストリームメモリ２２０は、データストリームから情報を抽出し、ユーザ認証タスクを実行し、および／またはデータベース１８０と対話してユーザアカウントのステータスを決定するプロセスを実行するための命令のセットを格納することができる。特定の実施形態では、ストリームメモリ２２０は、クライアントシステム１９０から追加情報を要求するための命令のセットを格納することができる。他の命令も可能である。一般に、命令は、開示された実施形態と一致するプロセスを実行するために、ストリームプロセッサ２３０によって実行され得る。
【００５６】
いくつかの実施形態では、ストリームプロセッサ２３０は、限定されないが、インテル（商標）によって製造されたＰｅｎｔｉｕｍ（商標）またはＸｅｏｎ（商標）ファミリ、ＡＭＤ（商標）によって製造されたＴｕｒｉｏｎ（商標）ファミリのマイクロプロセッサ、あるいは他のメーカーの様々なプロセッサなどの、１つまたは複数の公知の処理装置を含むことができる。しかし、他の実施形態では、ストリームプロセッサ２３０は、本開示と一致する機能を実行するように結合および構成された複数のデバイスであってもよい。例えば、ストリームプロセッサ２３０は、浮動小数点演算、グラフィックス、信号処理、文字列処理、暗号化またはＩ／Ｏインターフェースなどの特定のストリーム演算器１１０を動作させるようにそれぞれ構成された複数のコプロセッサを含むことができる。
【００５７】
いくつかの実施形態では、ストリームプロセッサ２３０は、ソフトウェアを実行して、ストリームプロセッサ２３０に記載されている各構成要素に関連する機能を実行することができる。他の実施形態では、ストリームプロセッサ２３０の各構成要素は、独立したデバイスであってもよい。そのような実施形態では、各構成要素は、データを具体的に処理するか、またはデータストリームを処理する動作を実行するように構成されたハードウェアデバイスであってもよい。例えば、ストリームプロセッサ２３０内のフィルタ／ノーマライザ２３２は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）であってもよいし、コンパイラ２３６は、中央処理装置（ＣＰＵ）であってもよい。他のハードウェアの組み合わせも可能である。さらに他の実施形態では、ハードウェアとソフトウェアの組み合わせを使用して、ストリームプロセッサ２３０を実装することができる。
【００５８】
フィルタ／ノーマライザ２３２は、データストリームを処理して、サービスシステム１０５に関係のないイベントを排除することができる。さらに、フィルタ／ノーマライザ２３２は、ストリーム演算器１１０によるさらなる処理のために、データストリーム内のイベントを準備することができる。例えば、フィルタ／ノーマライザ２３２は、時限動作と無関係である場合のデータストリーム内のイベントを排除することができる。そのような実施形態では、フィルタ／ノーマライザ２３２は、パスワードの変更またはユーザ名要求に関連するイベントを排除することができるが、購入要求またはトランザクション許可要求などの他のイベントを保持することができる。さらに、フィルタ／ノーマライザ２３２は、サービスシステム１０５を特定のアプリケーションに合わせて調整するように構成され得る。例えば、電子取引における不正行為を検出するようにサービスシステム１０５を構成するユーザは、電子トランザクションに関係のないイベントを排除するようにフィルタ／ノーマライザ２３２を設定することができる。異なるドメイン間の境界にこのようなフィルタを適用すると、無関係なイベントの必要な処理を最小限に抑えることで、コンピュータの動作を改善することができる。そのような実施形態では、フィルタ／ノーマライザ２３２は、番号または通貨の識別なしに任意のイベントをフィルタリングするなど、パーサーおよびシンボル識別子を含むことができる。あるいは、またはさらに、フィルタ／ノーマライザ２３２はまた、データストリーム内のイベントのヘッダ情報に基づくフィルタを含むことができる。例えば、フィルタ／ノーマライザ２３２は、サービスシステム１０５に関連する小売業者に関連しないＩＰアドレスから来るイベントを除外することができる。
【００５９】
いくつかの実施形態では、フィルタ／ノーマライザ２３２は、リアルタイムのアプリケーション制御ＴＣＰ／ＩＰトレーサを用いて実装され得る。そのような実施形態では、フィルタ／ノーマライザ２３２は、リアルタイムＴＣＰ／ＩＰスタックデータをネットワーク管理アプリケーションに提供して、ヘッダまたはペイロード特性信号をキャプチャするフィルタをセットアップすることができる。フィルタ／ノーマライザ２３２は、データストリームに複数のフィルタを同時に適用して、複数のトレースインスタンスを開き、各トレースインスタンスに固有のフィルタを設定して、所望のデータを取得することができる。そのような実施形態では、フィルタ／ノーマライザ２３２は、データトレースタイプのイベントまたはパケットトレースのために設定され得る。両方の構成で、フィルタ／ノーマライザ２３２は、ＴＣＰ／ＩＰスタックのグローバル設定に基づいてリアルタイムのＴＣＰ／ＩＰネットワーク監視を提供することができる。また、フィルタ／ノーマライザ２３２は、失われたまたは破棄されたデータをサービスシステム１０５の他の要素に格納および通知することができる。
【００６０】
フィルタ／ノーマライザ２３２はまた、着信イベントを変更して、フォーマットまたはデータ配置を標準化し、ダウンストリーム処理を容易にすることができる。例えば、フィルタ／ノーマライザ２３２は、データストリーム内のイベントを管理することができるので、フィルタ／ノーマライザ２３２がそれらを正規化した後に、ブローカ２３４は、キーおよび値を迅速に認識することができる。そのような実施形態では、フィルタ／ノーマライザ２３２は、生データを取り、それを処理し、解析をより助長するフォーマットでデータを出力することができる。したがって、フィルタ／ノーマライザ２３２は、データの強化、フィルタリング、および集約を含む多くの目的を果たすことができる。いくつかの実施形態では、フィルタ／ノーマライザ２３２は、フィルタリングまたは変換のためにＡｐａｃｈｅ  Ｓｐａｒｋ（商標）を使用して実装されてもよい。しかし、他の分散メモリ最適化システムもフィルタ／ノーマライザ２３２に適用可能であり得る。
【００６１】
フィルタ／ノーマライザ２３２は、後の処理を容易にするために、イベントの特定のカテゴリを変更することができる。例えば、フィルタ／ノーマライザ２３２は、各イベントに関連するタイムスタンプを正規化して、時間差の計算を単純化し、サービスシステム１０５の他の要素を単一のクロックで動作させることができる。さらに、リアルタイム状態計算器１２０による集約タスクを容易にするために、フィルタ／ノーマライザ２３２は、通貨、識別情報（例えば、ユーザ名および電子メールをクライアントＩＤに変換する）、データのフォーマット（例えば、．ｄｏｃファイルを．ｔｘｔに変換する）を標準化することができる。これらの準備タスクにより、リアルタイム情報を処理する際のコンピュータのパフォーマンスを向上させることができる。
【００６２】
いくつかの実施形態では、フィルタ／ノーマライザ２３２は、入力ストリームを出力ストリームに変換する１つまたは複数の演算器で構成され得る。フィルタ／ノーマライザ２３２の演算器は、データストリーム内の各イベントを処理して、少なくとも１つの態様を変更し、次に、演算器要件を満たす場合にのみイベントを提出することができる。例えば、データストリーム内のすべてのイベントは、アカウント番号、トランザクション日付、トランザクション時刻、トランザクション価格などの情報を含むように構成することができる。そのような実施形態では、イベントは、以下の４変数の「ＴｒａｎｓａｃｔｉｏｎＲｅｃｏｒｄ」タイプによって表すことができる。
ＴｒａｎｓａｃｔｉｏｎＲｅｃｏｒｄ＝
ｒｓｔｒｉｎｇ  ａｃｃｏｕｎｔ，
ｒｓｔｒｉｎｇ  ｄａｔｅ，
ｒｓｔｒｉｎｇ  ｔｉｍｅ，
ｄｅｃｉｍａｌ６４  ｐｒｉｃｅ；
ここで、ｒｓｔｒｉｎｇは、文字エンコードがわかっている場合に文字列処理をサポートする生バイトのシーケンスであり、ｄｅｃｉｍａｌ６４はＩＥＥＥ７５４の１０進数の６４ビット浮動小数点数である。
【００６３】
フィルタ／ノーマライザ２３２は、イベントでファイルされたデータのそれぞれを読み取り、それらを演算器と比較して、次に、演算器で入力ストリームに対して動作することによって生成された出力ストリームを生成することができる。一般に、フィルタ／ノーマライザ２３２の演算器は、入力ストリームからイベントを受信することができ、タプルがフィルタパラメータによって指定された基準を満たしている場合にのみ、イベント（「タプル」としても知られる）を出力ストリームに提出することができる。
【００６４】
いくつかの実施形態では、フィルタ／ノーマライザ２３２の演算器は、以下のステップを実行することができる。（１）入力データストリームからイベントを受信する、（２）アカウント属性の値が既存の顧客である場合には、イベントを出力ストリームに提出する、（３）入力ストリームからのすべてのイベントが処理されるまで、ステップ１からステップ２を繰り返す。フィルタ／ノーマライザ２３２の演算器は、異なるタイプのデータストリームで動作を実行し、必要に応じてフォーマットを変換することができる。例えば、いくつかの実施形態では、出力ストリームのタイプは、宣言「ｓｔｒｅａｍ＜Ｔｙｐｅ＞  ＯｕｔｐｕｔＳｔｒｅａｍ＝Ｆｉｌｔｅｒ（ＩｎｐｕｔＳｔｒｅａｍ）」内の入力ストリームによって指定される。フォーマット変換には、テキストファイルをある文字エンコーディングシステムから別の文字エンコーディングシステムに変換するなどのデータコーディング変換、あるいは、オフィスファイル形式の変換、または画像形式と音声ファイル形式の変換などのファイル変換が含まれ得る。さらなるフォーマット変換には、通貨、タイムゾーン、および／またはクライアント識別変換が含まれ得る。しかし、他の実施形態では、宣言がなくてもよく、ストリームのタイプは、ブローカ２３４またはサービスシステム１０５の他の要素の要件に基づいて、フィルタ／ノーマライザ２３２によって変更されてもよい。
【００６５】
ブローカ２３４は、ストリーム処理ソフトウェアを含むことができる。例えば、いくつかの実施形態では、ストリーム演算器１１０は、Ａｐａｃｈｅ  Ｋａｆｋａ（登録商標）などの処理プラットフォームを実装することができる。そのような実施形態では、ブローカ２３４は、処理プラットフォーム上で実行されている１つまたは複数のサーバーを含むことができる。ブローカ２３４は、フィルタ／ノーマライザ２３２の前または後にデータストリームを処理し、ブローカ２３４内のトピックにデータを公開することができる。
【００６６】
そのような実施形態では、ブローカ２３４は、クライアントシステム１９０からのデータストリーム内のイベントに来るキー値メッセージを抽出および格納するように構成可能であってもよい。ブローカ２３４は、データを異なる「トピック」内の異なる「パーティション」に分割することができる。パーティション内で、ブローカ２３４は、それらのオフセット（パーティション内のメッセージの位置）によってキー値メッセージを順序付け、タイマー２３８によって決定され得るタイムスタンプと共にインデックス付けされ、格納され得る。
【００６７】
ブローカ２３４は、ストリームからのデータを消費するＪａｖａアプリケーションを書くことを可能にするストリームＡＰＩで動作することができる。いくつかの実施形態では、ストリームＡＰＩは、ストリームプロセッサ２３０によって提供され、サービスシステム１０５の他の要素および／またはクライアントデバイス１５０などのシステム１００の他の要素から命令を受信することができる。そのような実施形態では、ストリームＡＰＩは、ブローカ２３４を使用して、データのストリームを入力トピックから出力トピックに変換することを可能にすることができる。さらに、ブローカ２３４は、Ａｐａｃｈｅ  Ａｐｅｘ、Ａｐａｃｈｅ  Ｆｌｉｎｋ、Ａｐａｃｈｅ  Ｓｐａｒｋ、およびＡｐａｃｈｅ  Ｓｔｏｒｍなどの外部ストリーム処理システムと連動するように構成可能であってもよい。例えば、ブローカ２３４は、他のシステムからデータを読み書きするための実際の論理を実装するコネクタを実行する接続ＡＰＩを使用して、他のシステムとの間でデータをインポート／エクスポートするように構成可能であってもよい。接続ＡＰＩは、ストリームプロセッサ２３０によって提供されてもよく、カスタムコネクタを構築するために実装されなければならないプログラミングインターフェースを定義することができる。例えば、接続ＡＰＩは、何らかのソースシステムまたはアプリケーションからＫａｆｋａを実行しているプロセッサ２３０に継続的にプルするか、あるいはＫａｆｋａからクライアントシステム１９０などの何らかのシンクシステムまたはアプリケーションにプッシュするコネクタを実装することを可能にすることができる。あるいは、またはさらに、ブローカ２３４は、ストリーム処理ライブラリで動作することができる。ライブラリは、スケーラブルで弾力性があり、完全にフォールトトレラントなステートフルなストリーム処理アプリケーションの開発を可能にすることができる。例えば、ブローカ２３４はまた、クライアントシステム１９０、またはシステム１００の他の要素から受信したデータストリーム内のイベントを編成および処理するための、フィルタ、マップ、グループ化、ウィンドウ処理、集約、結合、およびテーブルの概念のような高レベルの演算器を含むことができる。それに加えて、またはその代わりに、ブローカ２３４は、より低レベルの開発アプローチのためにカスタム演算器を実装し、フォールトトレランス動作を提供することができる。
【００６８】
いくつかの実施形態では、ブローカ２３４は、障害リスクを最小限に抑えるために冗長になるように構成されてもよい。例えば、すべてのトピックのパーティションは、ブローカ２３４のクラスタ全体に分散されてもよい。さらに、イベントのパーティションは、複数のブローカ２３４に複製されてもよい。このアーキテクチャにより、フォールトトレラントな方法でデータストリームを配信することができる。
【００６９】
ブローカ２３４は、イベントを処理するための通常のトピックと圧縮されたトピックとの両方をサポートすることができる。通常のトピックは、保持時間またはスペースバウンドで構成することができる。指定された保持時間より古い記録がある場合、またはパーティションのスペースバウンドを超えた場合には、ブローカ２３４は古いデータを削除してストレージスペースを解放することができる。例えば、ブローカ２３４は、ストリームメモリ２２０と結合されてもよく、期限切れになったイベントを削除するための命令を提供することができる。そのような実施形態では、ブローカ２３４によって開発されたトピックは、７日の保持時間で構成され得る。しかし、他のタイムウィンドウも可能である。例えば、２４時間のタイムウィンドウを、特定のデータストリームまたはストリーム内の特定の変数に対して構成することができる。それに加えて、またはその代わりに、タイムウィンドウは動的であってもよく、過去の傾向に基づいてプログラムされてもよい。例えば、ストリーム演算器１１０が特定の場所からのトランザクションの流入に気付いた場合には、ストリーム演算器１１０は、タイムウィンドウを変更してそれを減らし、潜在的な同時攻撃を防ぐことができる。他の実施形態では、トピックを圧縮すると、いくつかの記録は期限切れにならない場合がある。代わりに、ブローカ２３４は、後のメッセージを同じキーを有する古いメッセージの更新として扱い、キーごとに最新のメッセージを保持することを保証することができる。この変数の蓄積は、コンピュータの使用率を減らすために差分演算を実行する際に有益であり得る。
【００７０】
さらに、システム１００の異なる要素は、ストリーム演算器１１０によってサポートされるＡＰＩを使用してブローカ２３４と対話することができる。例えば、クライアントデバイス１５０、クライアントシステム１９０、および／またはオンラインリソース１４０は、（１）記録のストリームを公開することを可能にするプロデューサＡＰＩ、（２）トピックへのサブスクライブを可能にし、記録のストリームを処理することを可能にするコンシューマＡＰＩ、（３）トピックを既存のアプリケーションにリンクすることができる再利用可能なプロデューサＡＰＩおよびコンシューマＡＰＩを実行するコネクタＡＰＩ、および／または（４）入力ストリームを出力に変換して結果を生成するストリームＡＰＩを用いて、ブローカ２３４と対話することができる。いくつかの実施形態では、コンシューマおよびプロデューサＡＰＩは、フィルタ／ノーマライザ２３２などの他のストリーム処理要素上に構築することができ、Ｊａｖａのコンシューマおよびプロデューサクライアントのためのリファレンス実装を提供することができる。そのような実施形態では、基礎となるメッセージングプロトコルは、開発者が任意のプログラミング言語で独自のコンシューマまたはプロデューサクライアントを書くために使用できるバイナリプロトコルであってもよい。さらに、そのような実施形態では、ＡＰＩは、ストリームプロセッサ２３０によって実行および／またはサポートされ得る。しかし、これらのＡＰＩは、サービスシステム１０５の他の要素によってホストされてもよく、または例えばオンラインリソース１４０によってリモートでホストされてもよい。
【００７１】
いくつかの実施形態では、ブローカ２３４は、キー抽出器２３５と連携して動作することができ、キー抽出器２３５は、データストリームから来るイベント内のキーを抽出するように構成されたソフトウェアおよび／またはハードウェアを含むことができる。例えば、ブローカ２３４は、キー抽出器２３５によって抽出されたキーに基づいて、異なるトピックのイベントを分類および処理することができる。あるいは、キー抽出器２３５は、独立した要素としてブローカ２３４なしで動作することができる。
【００７２】
ストリーム演算器１１０は、キー／値ペアのメッセージを生成することによって、データストリーム内のイベントを処理することができる。キーは、問い合わせまたは結合の目的で、テーブルおよびトピック（例えば、ＫＳＱＬまたはＫｔａｂｌｅ）のパーティション分割およびモデリングに使用することができる。キーは、イベントの特性を含むことができる。例えば、キーは、ＩＰアドレス、クライアントＩＤ、アカウント番号、地理的位置、またはイベントの他の識別情報が含むことができる。値は、パーティションを決定するためにキーを限定することができる。キー抽出器２３５は、データストリーム内のイベントからキーを抽出するように構成可能であってもよい。例えば、キー抽出器２３５は、イベントが関連付けられている記録内のパーティションを決定するためのキーを取得することができる（例えば、トランザクションのタイプ）。対照的に、キーに関連する値は、イベントの実際のペイロード（例えば、トランザクションの値）であり得る。図８に関連してさらに説明するように、データストリーム内のイベントから抽出されたキーは、イベントに関連するアカウントまたはユーザを識別するために関連付けられ得る。
【００７３】
キー抽出器２３５は、タイムスタンプを抽出されたキーに関連付けながら、イベントから一連のｇｅｔ動作を実行するように構成され得る。Ｇｅｔ動作は、オブジェクト情報を取得する動作を含み、「Ｇｅｔ（ｂｙｔｅ  ［］  ｒｏｗ）」または「Ｇｅｔ（ｉｎｔ  ｒｏｗＯｆｆｓｅｔ、ｉｎｔ  ｒｏｗＬｅｎｇｔｈ）」などのコンストラクタを含むことができる。ｇｅｔ動作では、イベントから抽出する変数タイプを指定することもできる。例えば、フィルタ／ノーマライザ２３２が入力ストリームを処理し、所望の値のみを有する出力ストリームを生成した後に、キー抽出器２３５は、ターゲットキーワードをイベント内の情報と照合することによって、イベントからキーを取得または得ることができる。例えば、キー抽出器２３５は、以下の動作を実行することができる。
／／Ｇｅｔ  ｄａｔａ  ｓｔｒｅａｍ  ｓｔｏｒｅ  ｎａｍｅｄ“ｄａｔａｓｔｒｅａｍ”
ＲｅａｄＯｎｌｙＤａｔａｓｔｒｅａｍ＜Ｓｔｒｉｎｇ，Ｌｏｎｇ＞＝
ｓｔｒｅａｍｓ（“ｄａｔａｓｔｒｅａｍ”，ＱｕｅｒｙａｂｌｅＴｙｐｅｓ．ｄａｔａｓｔｒｅａｍ（））；
／／Ｆｅｔｃｈ  ｖａｌｕｅｓ  ｆｏｒ  ａ  ｋｅｙ（ｅ．ｇ．，“ａｍｏｕｎｔ”）ｆｏｒ  ａｌｌ  ｏｆ  ｔｈｅ  ｅｖｅｎｔｓ  ａｖａｉｌａｂｌｅ
ｌｏｎｇ  ｔｉｍｅＦｒｏｍ＝０；／／ｂｅｇｉｎｎｉｎｇ  ｏｆ  ｔｉｍｅ＝ｏｌｄｅｓｔ  ａｖａｉｌａｂｌｅ
ｌｏｎｇ  ｔｉｍｅＴｏ＝Ｓｙｓｔｅｍ．ｃｕｒｒｅｎｔＴｉｍｅＭｉｌｌｉｓ（）；／／ｎｏｗ（ｉｎ  ｐｒｏｃｅｓｓｉｎｇ−ｔｉｍｅ）
ＳｔｒｅａｍＩｔｅｒａｔｏｒ＜Ｌｏｎｇ＞  ｉｔｅｒａｔｏｒ＝
ｓｔｒｅａｍ．ｆｅｔｃｈ（“ａｍｏｕｎｔ”，ｔｉｍｅＦｒｏｍ，ｔｉｍｅＴｏ）；
ｗｈｉｌｅ（ｉｔｅｒａｔｏｒ．ｈａｓＮｅｘｔ（））｛
ＫｅｙＶａｌｕｅ＜Ｌｏｎｇ，Ｌｏｎｇ＞  ｎｅｘｔ＝ｉｔｅｒａｔｏｒ．ｎｅｘｔ（）；
ｌｏｎｇ  Ｔｉｍｅｓｔａｍｐ＝ｎｅｘｔ．ｋｅｙ；
Ｓｙｓｔｅｍ．ｏｕｔ．ｐｒｉｎｔｌｎ（“Ｃｏｕｎｔ  ‘ａｍｏｕｎｔ’  ＠  ｔｉｍｅ”＋Ｔｉｍｅｓｔａｍｐ＋“ｉｓ”
＋ｎｅｘｔ．ｖａｌｕｅ）．
【００７４】
キー抽出器２３５は、予測モデル解析のための、またはステートマシンを開発するためのイベントの順序付けを容易にすることができる。例えば、キー抽出器２３５によって抽出されたキーは、たとえそれらが複数の場所から来ているとしても、イベントパーティションをセットアップし、イベントを状態変数に関連付けるためにイベントを順序付けするために使用され得る。そのような実施形態では、キー抽出器２３５は、パーティション内のイベントを順序付けることができるが、トピック内のパーティション間では順序付けられない。さらに、キー抽出器２３５は、ブローカ２３４のトピックレベルの構成を実装し、「ｌｏｇ．ｃｌｅａｎｅｒ．ｅｎａｂｌｅ」などのＪａｖａパラメータを指定して、同じキーでエントリを重複排除することができる。そのような実施形態では、キー抽出器２３５は、ストリームメモリ２２０に結合されてもよく、キー抽出器２３５は、所与のキーの最新のインスタンスのみが関連すると仮定し、キーがヌルでない場合にのみ所与のキーの古い複製を削除することができる。例えば、状態変数はリアルタイム状態計算器１２０によって更新され得るので、繰り返されるキーを有する古いイベントは保持される必要はなく、スペースを節約するために削除され得る。いくつかの実施形態では、ログ圧縮の形式は、「ｌｏｇ．ｃｌｅａｎｅｒ．ｄｅｌｅｔｅ．ｒｅｔｅｎｔｉｏｎ」プロパティなどのＪａｖａパラメータによって制御することができる。
【００７５】
キー抽出器２３５は、イベントを分類し、それらの解析を容易にすることができるように、データストリーム内の特定の情報をリアルタイムで識別するための構成要素を提供することができる。
【００７６】
コンパイラ２３６は、プログラミング言語をコンパイルして、ストリームプロセッサ２３０でストリームプログラム２２２を実行するためのソフトウェアまたはハードウェアを含むことができる。コンパイラ２３６は、プラットフォーム中立のバイトコードを含むクラスファイルを出力することができる。あるいは、またはさらに、コンパイラ２３６は、特定のハードウェア／オペレーティングシステムの組み合わせのために最適化されたネイティブマシンコードを提供することができる。コンパイラ２３６は、Ｊａｖａからバイトコードへのコンパイラを含むことができるが、それは実行時間を改善するために実質的に最適化を実行しなくてもよい。いくつかの実施形態では、コンパイラ２３６は、クラスファイルをロードし、バイトコードを解釈するか、またはジャストインタイムでそれをマシンコードにコンパイルし、場合によっては動的コンパイルを使用してそれを最適化する仮想マシンを含むことができる。さらに、コンパイラ２３６は、解釈動作を実行して、ブローカ２３４動作をセットアップおよび構成することができる。例えば、コンパイラ２３６は、前処理、字句解析、構文解析、意味解析（構文指向変換）、入力プログラムの中間表現への変換、コード最適化、およびコード生成を実行することができる。コンパイラ２３６は、効率的な設計を促進し、ソース入力からターゲット出力への正しい変換を促進するフェーズでこれらの動作を実装することができる。
【００７７】
タイマー２３８は、データストリームを処理するためのハードウェアおよび／またはソフトウェアを含むことができる。例えば、タイマー２３８は、イベントのタイムスタンプを確立するためのタイミング情報を受信するためのＡＰＩ方法を含むことができる。タイマー２３８は、ストリーム時間または実時間のいずれかを含む、スケジューリングのための異なる時間タイプを決定することができる。いくつかの実施形態では、ストリーム時間は、ＴｉｍｅｓｔａｍｐＥｘｔｒａｃｔｏｒを介してイベントタイムを表すように構成される。あるいは、タイマー２３８は、絶対時間によってトリガされる実時間を実装することができる。
【００７８】
いくつかの実施形態では、タイマー２３８は、イベントの定期的なスタンプを有するように動作を実装することができる。例えば、
ｓｃｈｅｄｕｌｅ（１０００，ＰｕｎｃｔｕａｔｉｏｎＴｙｐｅ．ＳＴＲＥＡＭ＿ＴＩＭＥ，（ｔｉｍｅｓｔａｍｐ）−＞｛
ＫｅｙＶａｌｕｅＩｔｅｒａｔｏｒ＜Ｓｔｒｉｎｇ，Ｌｏｎｇ＞  ｉｔｅｒ＝ｔｈｉｓ．ｋｖＳｔｒｅａｍ（）；
ｗｈｉｌｅ（ｉｔｅｒ．ｈａｓＮｅｘｔ（））｛
ＫｅｙＶａｌｕｅ＜Ｓｔｒｉｎｇ，Ｌｏｎｇ＞  ｅｎｔｒｙ＝ｉｔｅｒ．ｎｅｘｔ（）；
ｃｏｎｔｅｘｔ．ｆｏｒｗａｒｄ（ｅｎｔｒｙ．ｋｅｙ，ｅｎｔｒｙ．ｖａｌｕｅ．ｔｏＳｔｒｉｎｇ（））；
｝
ｉｔｅｒ．ｃｌｏｓｅ（）；
【００７９】
ストリーム演算器１１０の構成要素は、ハードウェア、ソフトウェア、または両方の組み合わせで実装され得る。例えば、ストリーム演算器１１０の１つまたは複数の構成要素は、コンピュータソフトウェアに具体化されたコンピュータ処理命令として実装され得るが、ストリーム演算器１１０の機能の全部または一部は、専用のハードウェアに実装されてもよい。例えば、ＧＰＵおよび／またはＦＰＧＡのグループは、ストリームプロセッサ２３０においてマルチメディアコンテンツを迅速に処理するために使用されてもよい。
【００８０】
ここで図３を参照すると、開示された実施形態と一致する、例示的なリアルタイム状態計算器１２０（図１）のブロック図が示されている。リアルタイム状態計算器１２０は、計算器プロセッサ３４０、計算器メモリ３５０、および通信デバイス３６０を含むことができる。いくつかの実施形態では、リアルタイム状態計算器１２０は、データストリームからキャプチャされたイベントに基づいて状態変数を生成、監視、および更新することができる。さらに、リアルタイム状態計算器１２０は、対応する状態変数が指定されたしきい値を超えたときに、アカウント対するアラートを生成することができる。リアルタイム状態計算器１２０は、システム１００の他の要素にアラートを伝達することができる。例えば、リアルタイム状態計算器１２０は、ストリーム演算器１１０またはクライアント要求インターフェース１３０にアラート通知を提供することができる。
【００８１】
計算器プロセッサ３４０は、ストリームプロセッサ２３０と同様のプロセッサとして具体化することができる。計算器プロセッサ３４０は、状態変数アキュムレータ３４８を含むことができる。図３に示すように、いくつかの実施形態では、リアルタイム状態計算器はまた、計算器プロセッサ３４０とは異なるモジュールであり得る、予測モデル生成器３４２、不正行為／リスク検出サービス３４４、およびアカウント識別子３４６を含むことができる。しかし、他の実施形態では、予測モデル生成器３４２、不正行為／リスク検出サービス３４４、およびアカウント識別子３４６が、計算器プロセッサ３４０に含まれるか、または実装されてもよい。
【００８２】
予測モデル生成器３４２は、状態変数に基づいて予測モデルを生成または訓練するためのイベント情報を受信することができる。例えば、予測モデル生成器３４２は、不正行為または異常な振る舞いをもたらした以前のデータストリームから処理されたデータを受信することができる。この情報を用いて、予測モデル生成器３４２は、複数の状態変数を使用するモデルを解決して、異常または不正な行為をもたらすデータストリーム内のイベントのグループの可能性を決定することができる。
【００８３】
いくつかの実施形態では、予測モデル生成器３４２は、新しいイベント情報が複数のデータストリームから受信されているときに更新される機械学習モデルを含むことができる。例えば、図１２および図１３に関連してさらに説明されるように、予測モデル生成器３４２は、状態変数が不規則な振る舞いおよび／または不正行為の確率といつ相関するかを決定するためにイベント情報を使用するランダムフォレストまたは畳み込みニューラルネットワークモデルを訓練することができる。
【００８４】
モデルのトレーニングに加えて、予測モデル生成器３４２は、検証タスクも実行することができる。予測モデル生成器３４２は、検証の目的で、あるパーセンテージのトレーニングデータ（例えば、以前のデータストリーム内のイベント）を保持することができる。検証ホールドアウトが指定されている場合には、別のプロセスが実行され、検証セットに対してモデルが検証される。したがって、予測モデル生成器３４２は、初期生成とパラメータ調整の両方を実行することができる。
【００８５】
さらに、予測モデル生成器３４２は、例えば、トレーニングマイクロサービスのためのモデリングＡＰＩを使用して、モデルへのアクセス方法を確立することができる。マイクロサービスは、トレーニング要求の提出、モデル結果の取得、および／またはジョブの一覧表示に使用することができる。予測モデル生成器３４２はまた、データと対話するためのユーザインターフェースを提供することができる。
【００８６】
不正行為／リスク検出サービス３４４は、データストリーム内のイベントに基づいて潜在的な不規則性についてのアラートを送信するためのソフトウェアおよび／またはハードウェアを含むことができる。いくつかの実施形態では、不正行為／リスク検出サービス３４４は、アラートを積極的に生成および送信しなくてもよい。代わりに、不正行為／リスク検出サービス３４４は、ＨＴＴＰ  ＲＥＳＴ  ＡＰＩを介してリスクがあるかどうかを検出するための要求を受け入れることができる。そのような実施形態では、図１５に関連してさらに説明するように、不正行為／リスク検出サービス３４４は、受動的であり、アキュムレータ３４８と非同期され得る。そのような構成は、システム１００における異常の検出およびアラートのトリガを容易にする特定の技術的利点を提供する。例えば、ＨＴＴＰ  ＲＥＳＴ  ＡＰＩ構成では、不正行為／リスク検出サービス３４４は、異なるイベントの、および異なるドメインからの変数を精査することができる。したがって、支払いトランザクションの不正行為を検出するために、不正行為／リスク検出サービス３４４は、とりわけ、登録、ログイン、返品、注文、クレジットカード更新、クレジットカード認証に関連する変数を調べることができる。さらに、説明された構成では、不正行為／リスク検出サービス３４４は、より速い応答を有することができる。不正行為／リスク検出サービス３４４は、分離された変数を操作することができるので、不正行為／リスク検出サービス３４４は、変数の計算／更新に遅延または渋滞がある場合でも、データベースから既存の変数を検索することができる。ネットワークの輻輳を克服するこの機能は、不正か／不正ではないかの決定が１００ミリ秒未満で発生する必要がある支払いトランザクションの検出に役立つことができる。さらに、不正行為／リスク検出サービス３４４およびアキュムレータ３４８を分離することにより、システム１００はより堅牢になり得る。そのような実施形態では、不正行為／リスク検出サービス３４４は、不正行為の識別および要求の送信のためのモデルおよび規則を含むことができる。
【００８７】
他の実施形態では、不正行為／リスク検出サービス３４４は、状態変数の値を監視し、値がしきい値を超えたときにアラートを生成することができる。例えば、アカウントに関連するトランザクションの量を累積する状態変数を監視する場合、不正行為／リスク検出サービス３４４は、金額キーに関連する値が１０，０００ドルを超えるとアラートをトリガすることができる。次に、状態変数がしきい値を超えた場合には、それは、その状態変数に関連するアカウントが危険にさらされていることを意味しており、アラートを生成することができる。あるいは、またはさらに、不正行為／リスク検出サービス３４４は、予測モデルの結果を監視することができる。予測モデルが、しきい値を超えて（例えば、８０％を超える確率で）定義された異常または不正行為の可能性が高い場合は常に、アラート生成器はアカウントに関連するアラートを送信することができる。
【００８８】
いくつかの実施形態では、不正行為／リスク検出サービス３４４は、計算器プロセッサ３４０によって計算された状態変数のみに基づいてアラートを生成することができる。しかし、他の実施形態では、不正行為／リスク検出サービス３４４は、クライアントシステム１９０から来るトランザクションのストリームを直接利用することができる。次に、すべてのキーについて、不正行為／リスク検出サービス３４４は、キーに関連する値が指定されたしきい値を超えているかどうかを調べるステップを実行することができる。それに加えて、またはその代わりに、不正行為／リスク検出サービス３４４は、関連するアカウントとの将来の対話のために記録を更新することができる。例えば、不正行為／リスク検出サービス３４４は、クライアント要求インターフェース１３０と対話して、クライアント登録を更新し、危険にさらされたアカウントとの将来の対話を防止することができる。
【００８９】
アカウント識別子３４６は、データストリーム内のイベントから抽出されたキーをアカウントおよび対応する状態変数に関連付ける動作を実行することができる。アカウント識別子３４６は、イベントから抽出された１つまたは複数のキーに基づいて、関連するアカウントを導出することができる。さらに、いくつかの実施形態では、固有の情報がキーとして抽出されない場合でも、アカウント識別子３４６は、イベントのアドレスまたは関連する場所がアカウントとイベントとの間の相関を決定するかどうかを判定することができる。アカウント識別子３４６は、データベースに問い合わせることによって、イベントキーとアカウントとの間の関係を確立することができる。リアルタイム処理中に高速応答時間を必要とするいくつかの実施形態では、アカウント識別子３４６は、キーをアカウントと相関させるために非リレーショナルデータベース（ＮＯＳＱＬなど）に問い合わせることができる。それに加えて、またはその代わりに、アカウント識別子３４６は、イベントにおいて複数のキーを使用して、イベントに関連するアカウントを識別してもよい。例えば、アカウント識別子３４６は、キーがアカウントを識別するのに不十分である場合であっても、トランザクションの場所、金額、および小売業者のタイプを考慮して、それをアカウントに関連付けることができる。
【００９０】
アキュムレータ３４８は、データストリーム内のイベントに基づいて状態変数を更新するように構成され得る。さらに、アキュムレータ３４８は、状態変数内の特定のイベントが期限切れになると、それらからの影響を取り除くことができる。さらに、アキュムレータ３４８は、新しいイベントに基づいて状態変数を更新するときに、タイマーまたはコールバックを関連付けることができる。例えば、イベントが受信され、ストリーム演算器１１０（図２）がそれをトリガイベントとして識別し、キーがキー抽出器２３５によって抽出され、アカウントが識別されると、アキュムレータ３４８は、イベントに基づいてアカウントに関連する状態変数を変更することができる。例えば、図１４Ａ〜図１４Ｃに関連してさらに説明するように、アキュムレータ３４８は、購入金額を監視している変数にトランザクション金額を蓄積することができる。いくつかの実施形態では、アキュムレータ３４８は、蓄積された変数を格納し、それらを不正行為／リスク検出サービス３４４に送信することができる。
【００９１】
アキュムレータ３４８は、変数を迅速に更新し、それらの複雑度を低く保ち、迅速なアクセスおよび迅速な結論を容易にするように構成され得る。いくつかの実施形態では、アキュムレータ３４８は、アルゴリズムの実行時間が入力のサイズに依存しないＯ（１）関数を使用して、状態変数を更新することができる。そのような実施形態では、変数を更新するための均一な実行時間を有することは、待ち時間を最小化することによってシステムの動作を改善することができる。
【００９２】
図３は、計算器プロセッサ３４０に関連するアキュムレータ３４８、不正行為／リスク検出サービス３４４、および予測モデル生成器３４２を示しているが、いくつかの実施形態では、これらの要素の各々は、別個の構成要素であってもよく、ターゲットアプリケーションに合わせて調整された特定のハードウェアを有してもよい。例えば、予測モデル生成器３４２はＦＰＧＡであってもよく、アキュムレータ３４８はＣＰＵであってもよい。
【００９３】
計算器メモリ３５０は、開示された実施形態に関連する動作を実行するために計算器プロセッサ３４０によって使用される命令を格納するように構成された１つまたは複数の記憶装置を含むことができる。例えば、計算器メモリ３５０は、計算器プロセッサ３４０によって実行されたときに動作を実行することができるソフトウェア命令を格納することができる。さらに、計算器メモリ３５０は、計算器プログラム３５２（関数およびキー抽出方法を指定することができる）、有効期限規則３５４（イベントが状態変数に影響を与えないようにする時期を決定する）、およびアカウント情報３５６（イベントから抽出されたキー、アカウント、および対応する状態変数間の相関関係を含む）を含むことができる。
【００９４】
計算器メモリ３５０はまた、高速アクセスの個別状態ストレージ３５８を含むことができる。リアルタイム計算中の待ち時間を最小限に抑え、迅速に結論に到達できるようにするために、個別状態ストレージ３５８をＳＲＡＭで実装することができる。あるいは、またはさらに、個別状態ストレージ３５８は、他の高速アクセスメモリを使用することができる。例えば、個別状態ストレージ３５８は、処理ユニットとメモリユニットとの間の通信を容易にするために、ハイブリッドトランザクションおよび解析的処理構成にキャッシュメモリを含むことができる。そのような実施形態では、個別状態ストレージ３５８は、トランザクションワークロードと解析ワークロードの両方をサポートするために単一のデータベースバックエンドを有するように実装され得る。
【００９５】
個別状態ストレージ３５８は、データストリーム内のイベントに基づいて生成および更新される状態変数を格納することができる。そのような実施形態では、個別状態ストレージ３５８は、重複を排除するため、またはトリガイベントがある場合にのみ状態変数へのアクセスを許可するためのネイティブ機能を含むことができる。このような構成では、ハードウェア要件を緩和し、データのコピーを１つだけ維持することで、コンピュータの機能を向上させることができる。したがって、個別ストレージ３５８は、機能の複雑度を均一に保つので、短期および長期の両方の状態変数に対して高いパフォーマンスを促進することができる。また、計算されたデータポイントは、個別状態ストレージ３５８に格納されてもよく、メモリ使用率を低減し、ハードウェア使用率を改善することができる。
【００９６】
いくつかの実施形態では、個別状態ストレージ３５８は、アキュムレータ３４８によって動作および使用されるように構成可能であってもよい。そのような実施形態では、個別状態ストレージ３５８は、ＲｏｃｋｓＤＢなどのキー値データのための高性能の組み込みデータベースであってもよい。次に、すべてのアキュムレータインスタンスは、同じサーバー内にあるＲｏｃｋｓＤＢデータベースに独自の状態ストアを有することができる。個別状態ストレージ３５８およびアキュムレータ３４８は、ローカルアクセスを介して互いに通信することができ、ネットワークアクセスを必要としない。この方法での通信は、ネットワークを介したリモートよりも高速である可能性があり、アキュムレータが組み込みデータベースと通信するのに十分である。いくつかの実施形態では、キー抽出器２３５は、同じキーを有するイベントをアキュムレータ３４８の特定のインスタンスに送信するように構成され得る。したがって、個別状態ストレージ３５８は、特定のキーのイベントを格納することができる。
【００９７】
特定の実施形態では、計算器メモリ３５０は、状態変数を更新し、Ｏ（１）の複雑度を強制するためのプロセスを実行するための命令のセットを格納することができる。例えば、サービスシステム１０５は、クライアントシステム１９０からデータストリームを受信することができる。この情報に基づいて、リアルタイム状態計算器１２０は、変数の状態を決定することができる。計算器メモリ３５０は、処理された状態変数が時間の複雑度を増加させず、同時に実行されるアルゴリズムで使用できることを検証することができる。例えば、計算器プロセッサ３４０が、問い合わせ動作、または予測モデルを実行する際に遅延を引き起こすような多次元の変数を出力する場合には、計算器メモリ３５０は、アルゴリズム全体のＯ（１）の複雑度を強制するために、平均値またはモードなどの演算を切り捨てたり、演算を行わせたりすることによって変数の複雑度を低減することができる。
【００９８】
ここで図４を参照すると、開示された実施形態と一致する、例示的なクライアント要求インターフェース１３０（図１）のブロック図が示されている。クライアント要求インターフェース１３０は、インターフェースメモリ４３０、インターフェースプロセッサ４４０、および通信デバイス４６０を含むことができる。いくつかの実施形態では、クライアント要求インターフェース１３０は、クライアントシステム１９０からのトランザクションを処理し、承認されたトランザクションに基づいてユーザアカウント記録を変更する要求を受信するように構成され得る。
【００９９】
インターフェースメモリ４３０は、クライアントシステム１９０および／またはクライアントデバイス１５０からのトランザクション許可要求を処理するための命令を格納するように構成された１つまたは複数の記憶装置を含むことができる。インターフェースメモリ４３０は、インターフェースプログラム４３２を含むことができ、これは、クライアントシステム１９０、および例えば、クライアントデバイス１５０とサービスシステム１０５との間の対話をサポートするためのＡＰＩ管理命令を含むことができる。
【０１００】
インターフェースメモリ４３０はまた、トランザクションを受け入れるまたは拒否することに関連することができるアカウントに関する情報を格納するアカウント記録４３４を含むことができる。例えば、アカウント記録４３４は、とりわけ、アラート通知、利用可能な資金、およびアカウント設定を含む、サービスシステム１０５のユーザのファイルおよびデータベースを含むことができる。インターフェースメモリ４３０は、開示された実施形態に関連する機能を実行するためにインターフェースプロセッサ４４０によって使用される命令を格納する記憶装置をさらに含むことができる。例えば、インターフェースメモリ４３０は、インターフェースプロセッサ４４０によって実行されるときに１つまたは複数の動作を実行することができるソフトウェア命令を格納することができる。
【０１０１】
インターフェースプロセッサ４４０は、ストリームプロセッサ２３０と同様のプロセッサとして具体化することができる。インターフェースプロセッサ４４０プロセッサは、クライアント認証器４４２、ＡＰＩマネージャ４４４、およびクライアント登録４４６を含むことができる。
【０１０２】
クライアント認証器４４２は、クライアントデバイス１５０またはクライアントシステム１９０から受信した資格情報（クライアントデバイス１５０から受信したパスワードまたは生体測定データなど）を特定のユーザアカウントに関連する情報と比較するように構成されたハードウェアまたはソフトウェアで実装することができる。あるいは、またはさらに、クライアント認証器４４２は、イベントにおいてクライアントＩＤキーを解決して、ユーザアカウントを識別することができる。例えば、クライアント認証器４４２は、電子メールアドレスまたは電話番号でキーを識別し、要求しているユーザアカウントを識別するように構成され得る。そのような実施形態では、クライアント認証器４４２は、暗号化および復号化プロセスを実行して、識別ツールを提供および検証することができる。
【０１０３】
ＡＰＩマネージャ４４４は、サービスシステム１０５にアクセスするためにシステム１００の他の要素にＡＰＩを提供するための動作を実行するように構成されたハードウェアまたはソフトウェアで実装され得る。ＡＰＩマネージャ４４４は、ウェブＡＰＩを作成および公開し、それらの使用ポリシーを実施し、アクセスを制御し、使用統計を収集および解析し、そしてパフォーマンスについて報告することができる。ＡＰＩマネージャ４４４はまた、サービスシステム１０５のためのアプリケーションの開発者をサポートするための機構およびツールを提供することができる。ＡＰＩマネージャ４４４は、ゲートウェイの動作を実行し、ＡＰＩ要求を受信し、セキュリティポリシーを実施し、サービスシステム１０５のバックエンド構成要素に要求を渡すことができる。それに加えて、またはその代わりに、ＡＰＩマネージャ４４４は、公開ツール、開発者ポータル／ＡＰＩ、報告および解析機能、ならびに収益化機能を含むことができる。
【０１０４】
クライアント登録４４６は、新しいクライアントを処理し、それらの登録情報に基づいて、それらが既存のアカウントに関連付けられているかどうかを判定するように構成されたハードウェアまたはソフトウェアで実装され得る。状態変数または過去の傾向に関連付けられていない新しいアカウントからの潜在的な不正行為を防ぐために、クライアント登録４４６は、抽出されたキーに基づいて、新しいアカウントがサービスシステム１０５で受け入れられるべきかどうかを決定するために新しいアカウントの解析を実行することができる。
【０１０５】
通信デバイス４６０は、１つまたは複数のデジタルおよび／またはアナログデバイスとして具体化されて、クライアント要求インターフェース１３０とサービスシステム１０５の他の要素との間、およびクライアント要求インターフェース１３０とクライアントデバイス１５０などのシステム１００の他の要素との間の通信を可能にする。
【０１０６】
ここで図５を参照すると、開示された実施形態と一致する、例示的なデータベース１８０（図１）のブロック図が示されている。データベース１８０は、通信デバイス５０２と、１つまたは複数のデータベースプロセッサ５０４と、１つまたは複数のデータベースプログラム５１２およびデータ５１４を含むデータベースメモリ５１０と、を含むことができる。データベース１８０は、ＨＢａｓｅ、ＭｏｎｇｏＤＢ（商標）またはＣａｓｓａｎｄｒａ（商標）などのＮｏＳＱＬデータベースを含むことができる。あるいは、データベース１８０は、Ｏｒａｃｌｅ、ＭｙＳＱＬ、およびＭｉｃｒｏｓｏｆｔ  ＳＱＬ  Ｓｅｒｖｅｒなどのリレーショナルデータベースを含むことができる。
【０１０７】
いくつかの実施形態では、データベース１８０は、サーバー、汎用コンピュータ、メインフレームコンピュータ、またはこれらの構成要素の任意の組み合わせの形態をとることができる。いくつかの実施形態では、データベース１８０は、サービスシステム１０５などのシステム１００の他の要素内に含まれる。開示された実施形態と一致する他の実施態様も可能である。
【０１０８】
いくつかの実施形態では、データベース１８０は、非リレーショナルデータベースと組み込みデータベースの両方を含むことができる。例えば、データベース１８０は、Ｈｂａｓｅなどの非リレーショナルデータベース、およびＲｏｃｋｓＤＢ（例えば、キー値ストアデータベース）などの組み込みデータベースを含むことができる。非リレーショナルデータベースは、様々な期間の変数値を格納することができるが、埋め込みデータベースは、アキュムレータ３４８によって生成されたものなどの状態変数と、期限切れイベント、非期限切れイベント（新しいイベントを含む）などの状態変数に影響を与えるイベントと、を格納することができる。そのような実施形態では、埋め込まれた記録は、演算器に対して局所的であってもよく、最小の待ち時間でキー抽出およびイベントディスパッチを容易にするために１００％のデータ局所性を有する。
【０１０９】
通信デバイス５０２は、オンラインリソース１４０、サービスシステム１０５、リアルタイム状態計算器１２０、クライアント要求インターフェース１３０、および／またはクライアントデバイス１５０などのシステム１００の１つまたは複数の構成要素と通信するように構成され得る。特に、通信デバイス５０２は、リアルタイム状態計算器１２０、ストリーム演算器１１０、およびクライアント要求インターフェース１３０に、ユーザアカウント情報、ユーザの選好と特権、および／または過去の傾向を提供するように構成され得る。
【０１１０】
通信デバイス５０２は、例えば、計算器メモリ３５０（図３）、インターフェースメモリ４３０（図４）、およびストリームメモリ２２０（図２）を含む他の構成要素とも通信するように構成され得る。通信デバイス５０２は、通信デバイス２１０（図２）について上述した形態のいずれかをとることができる。
【０１１１】
データベースプロセッサ５０４、データベースメモリ５１０、データベースプログラム５１２、およびデータ５１４は、図２に関連して、それぞれ、ストリームプロセッサ２３０、ストリームメモリ２２０、ストリームプログラム２２２、およびストリームデータ２２４について上記の形態のいずれかをとることができる。データベース１８０の構成要素は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの両方の組み合わせで実装され得る。例えば、データベース１８０の１つまたは複数の構成要素は、コンピュータ処理命令モジュールとして実装され得るが、データベース１８０の機能のすべてまたは一部は、代わりに、専用の電子ハードウェアに実装されてもよい。
【０１１２】
データベースメモリ５１０は、プログラム５１２を含むことができ、これは、クライアントシステム１９０からの問い合わせ、および例えば、クライアントデバイス１５０とサービスシステム１０５との間の対話をサポートするための命令を含むことができる。さらに、プログラム５１２は、情報がサービスシステム１０５によって処理されるときにリアルタイムで情報を格納するための命令を含むことができる。
【０１１３】
データ５１４は、オンラインリソース１４０などのウェブサイト、またはクライアントデバイス１５０からのユーザアカウントに関連するデータであってもよい。データ５１４は、例えば、コンテンツを取得するためのユーザおよびその資格情報に関連する情報を含むことができる。データ５１４はまた、データストリーム内のイベントから抽出されたキーをユーザアカウントと相関させるための情報を含む、アカウント記録４３４（図４）と同様のコンテンツファイルを含むことができる。
【０１１４】
ここで図６を参照すると、開示された実施形態と一致する、例示的なクライアントデバイス１５０（図１）のブロック図が示されている。一実施形態では、クライアントデバイス１５０は、１つまたは複数のプロセッサ６０２、１つまたは複数の入力／出力（Ｉ／Ｏ）デバイス６０４、ならびに１つまたは複数のメモリ６１０を含むことができる。いくつかの実施形態では、クライアントデバイス１５０は、スマートフォンもしくはタブレット、汎用コンピュータ、またはこれらの構成要素の任意の組み合わせなどのモバイルコンピューティングデバイスの形態をとることができる。あるいは、クライアントデバイス１５０（またはクライアントデバイス１５０を含むシステム）は、開示された実施形態と一致する１つまたは複数の動作を実行するソフトウェア命令の格納、実行、および／または実装に基づいて、特定の装置、組み込みシステム、専用回路などとして構成されてもよい。いくつかの実施形態によれば、クライアントデバイス１５０は、開示された実施形態と一致するウェブサイトにアクセスするウェブブラウザまたは同様のコンピューティングデバイスを含むことができる。
【０１１５】
プロセッサ６０２は、１つまたは複数の公知の処理デバイス、例えば、ｌｎｔｅｌ（商標）、ＮＶＩＤＩＡ（商標）によって製造されたモバイルデバイスマイクロプロセッサ、または他の製造業者による様々なプロセッサを含むことができる。開示された実施形態は、クライアントデバイス１５０で構成された特定のタイプのプロセッサに限定されない。
【０１１６】
メモリ６１０は、開示された実施形態に関連する機能を実行するためにプロセッサ６０２によって使用される命令を格納するように構成された１つまたは複数の記憶装置を含むことができる。例えば、メモリ６１０は、プロセッサ６０２によって実行されるときに動作を実行することができるプログラム６１２などの１つまたは複数のソフトウェア命令で構成され得る。開示された実施形態は、専用のタスクを実行するように構成された別個のプログラムまたはコンピュータに限定されない。例えば、メモリ６１０は、クライアントデバイス１５０の機能を実行する単一のプログラム６１２を含むことができ、またはプログラム６１２は複数のプログラムを含むことができる。メモリ６１０はまた、データストリームを生成するために使用されるデータ６１６を格納することができる。すなわち、メモリ６１０は、トランザクション承認またはコンテンツを要求する一連のデータパケットをサービスシステム１０５に送信するための命令を含むことができる。
【０１１７】
特定の実施形態では、メモリ６１０は、サービスシステム１０５にアクセスするための命令を格納することができる。例えば、メモリ６１０は、ＴＣＰ／ＩＰを介してサービスシステム１０５と通信するアプリケーションを含むことができる。さらに、他のソフトウェア構成要素は、サービスシステム１０５からの情報を要求するか、またはクライアントデバイス１５０の位置を決定するように構成され得る。例えば、これらのソフトウェア命令は、プロセッサ６０２によって実行されると、情報を処理してトランザクションのステータスを表示することができる。
【０１１８】
Ｉ／Ｏデバイス６０４は、クライアントデバイス１５０によってデータを受信および／または送信することを可能にし、クライアントデバイス１５０がシステム１００の他の構成要素などの他のマシンおよびデバイスと通信することを可能にするように構成された１つまたは複数のデバイスを含むことができる。例えば、Ｉ／Ｏデバイス６０４は、クイックレスポンスコード（ＱＲ）などの光学的支払い方法を表示するための、またはユーザに情報を提供するための画面を含むことができる。Ｉ／Ｏデバイス６０４はまた、ＮＦＣ通信のための構成要素を含むことができる。Ｉ／Ｏデバイス６０４はまた、タッチ感応領域、ボタン、またはマイクロフォンなどのユーザがクライアントデバイス１５０と対話することを可能にする１つまたは複数のデジタルおよび／またはアナログデバイスを含むことができる。Ｉ／Ｏデバイス６０４はまた、クライアントデバイス１５０の向きおよび慣性を検出するための１つまたは複数の加速度計を含むことができる。Ｉ／Ｏデバイス６０４はまた、サービスシステム１０５と対話するための当技術分野で公知の他の構成要素を含むことができる。
【０１１９】
いくつかの実施形態では、クライアントデバイス１５０はまた、画像をキャプチャし、顔認識などの生体認証プロセスに使用され得るカメラ６２０を含むことができる。それに加えて、またはその代わりに、クライアントデバイス１５０は、ユーザがクライアントデバイス１５０のロックを解除し、および／または認証を実行することを可能にする指紋センサ６３０を含むことができる。カメラ６２０および指紋センサ６３０の両方は、プロセッサ６０２によって動作されてもよく、暗号化セキュリティを使用して、ユーザが指紋またはカメラ情報に外部からアクセスすることを不可能にすることができる。
【０１２０】
クライアントデバイス１５０の構成要素は、当業者には明らかであるように、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの両方の組み合わせで実装され得る。
【０１２１】
ここで図７を参照すると、開示された実施形態と一致する、データストリーム処理フロー７００を示すプロセスフロー図が示されている。いくつかの実施形態では、図７に示すように、システム１００（図１）の異なる要素は、フロー７００の特定のステップを実行することができる。例えば、サービスシステム１０５の構成要素は、１つまたは複数のステップを実行することができるが、クライアントシステム１９０などの他のシステムは、他のステップを実行することができる。しかし、他の実施形態では、システム１００の代替要素は、説明されたステップを実行することができ、またはシステム１００の単一の要素は、説明されたステップの１つまたは複数を実行することができる。
【０１２２】
ステップ７０２で、クライアントシステム１９０は、データストリームをサービスシステム１０５に送信することができる。データストリームは、サービスシステム１０５と相互作用するためのトランザクション要求、発注、または同様のメッセージを含むことができる。データストリームは、異なる通信プロトコルに従って配置されたパケットのシーケンスを含むことができる。例えば、ステップ７０２のデータストリームのいくつかは、ＴＣＰ通信であってもよく、他のデータストリームはＵＤＰ通信であってもよい。
【０１２３】
ステップ７０４で、フィルタ／ノーマライザ２３２は、データストリーム内のイベントをフィルタリングおよび正規化した後に、１つまたは複数の出力データストリームを生成することができる。図２に関連してさらに説明されるように、フィルタ／ノーマライザ２３２は、１つまたは複数のデータストリームを入力として受信し、演算器を適用して、限られたフィールドを有するか、または予測モデルまたは異常検出に使用できないイベントを除去する出力データストリームを生成することができる。それに加えて、またはその代わりに、ステップ７０４で、フィルタ／ノーマライザ２３２は、標準に一致するように均一なフォーマットまたは変更された値を有するイベントを有するフィルタリングされたデータストリームを生成することができる。さらに、ステップ７０４で、フィルタ／ノーマライザ２３２は、関連するイベントタイムを含まないイベントを識別し、関連するイベントタイムを有さないイベントを削除し、イベントタイムのタイムゾーンおよびイベントの通貨を正規化することによって削除されていないイベントのイベント情報を正規化するための動作を実行することができる。
【０１２４】
ステップ７０６で、ブローカ２３４は、着信データストリームを受け入れ、要求されたときにそれらをダウンストリームデータに分類することができる。例えば、ステップ７０６で、ブローカ２３４は、データストリーム内の異なるイベントのトピックを生成し、タイムスタンプに基づいてイベントのタイマーまたはコールバックを発行することができる。ステップ７０７で、キー抽出器２３５は、データストリームを処理して、キーを抽出し、関連するアカウントを識別し、アカウントに関連する状態変数を見つけまたは生成することができる。ステップ７０７におけるキー／値のペアの抽出は、１つまたは複数のリアルタイム処理要件に従って予め定義され得る。
【０１２５】
いくつかの実施形態では、図１５に関連してさらに説明するように、フィルタ／ノーマライザ２３２は、ブローカ２３４の後に動作することができる。例えば、ステップ７０２からのデータストリーム内のメッセージが予め定義され、送信者と受信者との間で合意される実施形態では、フィルタ／ノーマライザ２３２は、ブローカ２３４の後に配置されてもよい。次に、ユーザは、フィルタ／ノーマライザ２３２を使用して、実行時に消費するトピック／メッセージを選択できる。さらに他の実施形態では、フィルタ／ノーマライザ２３２は、ブローカ２３４の後に配置されてもよい。
【０１２６】
ステップ７０８で、処理されたデータストリームは、アキュムレータ３４８によって状態変数を修正または更新するために使用され得る。例えば、アキュムレータ３４８は、処理されたイベントの影響を集約することによって状態変数を変更することができる。そのような実施形態では、新しいトランザクションイベントがサービスシステム１０５によって処理されると、アキュムレータは、ステップ７０８で、トランザクションの値を状態変数に追加することができる。変数は、複雑度を増すことなく更新できるため、引き続きＯ（１）複雑度の演算で動作可能であり、および／または一定の時間複雑度でアクセス可能である。例えば、アキュムレータ３４８は、状態変数を単一次元に保持することができるので、状態変数を含むいかなる動作も、計算の複雑度を増すことはなく、均一な時間で解決することができる。そのような実施形態では、Ｏ（１）複雑度の演算器でアクセスされるように構成可能な状態変数は、例えば、配列、固定サイズのスタック、または固定サイズのキューを含むことができる。これらの変数の配置には、入力サイズに関係なく、一定の時間内に状態変数にアクセスする演算器を使用してアクセスすることができる。例えば、状態変数に配列が含まれている場合、Ｏ（１）演算器が配列の要素にアクセスしていることができる。そのような実施形態では、状態変数は、「ｇｅｔ（ａｒｒａｙ（０））」などのＯ（１）複雑度関数でアクセスできる固有の位置を有する配列を有する単一値変数であってもよい。あるいは、またはさらに、状態変数は、プッシュおよびポップ演算器などのＯ（１）複雑度の演算器を使用してアクセスできる固定サイズのスタックのアーキテクチャを含むことができる。さらに、状態変数は、エンキュー演算器やデキュー演算器などの演算器を使用して、一定の時間でアクセスできる（つまり、入力サイズに関係なく一定時間で実行される）固定サイズのキューを含むことができる。したがって、ステップ７０８で、アキュムレータ３４８は、状態変数内のイベントを集約することができるが、Ｏ（１）複雑度のアクセス可能性を維持することによって、変数から情報を迅速に取り込む能力を維持することができる。例えば、アキュムレータ３４８は、状態変数に格納された単一の値にイベントの影響を加算または減算することができる。
【０１２７】
さらに、ステップ７０８で、アキュムレータ３４８は、影響ウィンドウの外側にあるイベントの影響を排除することができる。例えば、新しいイベントによってトリガされると、アキュムレータ３４８は、状態変数に新しいイベントを追加し、特定のイベントを削除すべきかどうかを決定することもできる。アキュムレータ３４８は、例えば、タイムスタンプまたはコールバック関数に基づいて、その変数についてタイムウィンドウの外側にあるイベントを識別することができる。アキュムレータ３４８の動作を、トリガイベントが対応する状態変数に影響を与える場合だけに制限することにより、アキュムレータ３４８の使用率を最小化し、ハードウェア使用率を最小化して、コンピュータ動作の効率を改善することが可能である。
【０１２８】
ステップ７１０で、不正行為／リスク検出サービス３４４は、１つまたは複数の状態変数のステータスが、関連するアカウントに対するアラートを生成すべきかどうかを決定することができる。例えば、ある期間にわたって一連のイベントを蓄積する状態変数がしきい値を超えると、不正行為／リスク検出サービス３４４は、疑わしい振る舞いを識別し、蓄積または状態変数に関連するアカウントに対するアラートを生成することができる。いくつかの実施形態では、ステップ７１０で、不正行為／リスク検出サービス３４４は、異なる値または異なるパラメータを蓄積し得る複数の状態変数を考慮に入れる予測モデル推定からの結果に基づいてアラートをトリガすることができる。
【０１２９】
また、ステップ７１０で、不正行為／リスク検出サービス３４４は、アラートをクライアント要求インターフェース１３０に伝達することができる。アラート信号に応答して、クライアント要求インターフェース１３０は、ＡＰＩマネージャ４４４の命令を変更し、アラートに関連するアカウントについてのサービスシステム１０５へのアクセスを制限することができる。例えば、ステップ７１０で、サービスシステム１０５は、レジスタを更新し、ＡＰＩマネージャ４４４のフィールドをカスタマイズして、命令を変更し、アクセス可能性を制限することができる。さらに、ステップ７１０で、サービスシステム１０５は、ＡＰＩ応答へのリンクを追加し、および／またはクライアントシステム１９０の要求に応じて応答の動作を変更するためにＣＵＲＩＥ（またはコンパクトＵＲＩ）を登録することができる。
【０１３０】
ステップ７０２〜ステップ７１０は、クライアントシステム１９０からのデータストリームを絶えず監視するためにリアルタイムで実行され得る。一定期間にわたって一連のイベントを蓄積する状態変数を使用すると、傾向のリアルタイム評価が容易になり、必要な計算の数が減り、ハードウェア要件が緩和される。データストリーム内のイベントから抽出された複数のキーのアキュムレータを維持することにより、一連のイベントが不正または異常な行為に関連する可能性があるかどうかを迅速かつ効率的に判定することができる。
【０１３１】
フロー７００はまた、クライアントシステム１９０がＡＰＩを使用してサービスシステム１０５からのトランザクションを要求するステップ７１２を含むことができる。いくつかの実施形態では、システム１００の他の要素は、サービスシステム１０５からの情報またはサービスを要求することができる。例えば、サードパーティシステム１６０はまた、クライアント要求インターフェース１３０に連絡することによって、サービスシステム１０５からの情報を要求することができる。クライアント要求インターフェース１３０が外部ドメインからメッセージを受信すると、クライアント要求インターフェース１３０は、メッセージに関連するアカウントを識別し、アカウントがアラートに関連するかどうかを判定することができる。アカウントがアラートに関連している場合には、クライアント要求インターフェースは、ステップ７１４で拒否または警告メッセージで応答することができる。しかし、ＡＰＩ要求がアラートの下のアカウントに関連していない場合には、クライアント要求インターフェース１３０は、クライアントシステム１９０（または要求を送信したシステム１００内の要素）への承認で応答することができる。
【０１３２】
したがって、ステップ７０２〜ステップ７１０のリアルタイム処理フローで生成されたアラートを使用して、ＡＰＩ要求を処理し、および／またはクライアントシステム１９０と対話するサービスシステム１０５内の要素に通知および変更することによって、危険にさらされたアカウントからのさらなるトランザクションを防ぐことができる。さらに、いくつかの実施形態では、クライアント要求インターフェース１３０は、新しいデータストリームが来て、識別されたアカウントに関連付けられている可能性があることを、リアルタイム状態計算器１２０に通知することができる。この配置により、システム１０５は、クライアントアカウントを検索または識別する必要がある回数を減らすことができる。
【０１３３】
ここで図８を参照すると、開示された実施形態と一致する、アラート生成プロセスを説明するフローチャートが示されている。プロセス８００は、クライアントシステム１９０および／またはシステム１００の他のネットワーク化された要素からのデータストリームの受信に応答して、サービスシステム１０５によってリアルタイムで実行され得る。例えば、プロセス８００は、データストリーム内のイベントが受信されているときに、ストリーム演算器１１０およびリアルタイム状態計算器１２０によってリアルタイムで実行され得る。
【０１３４】
ステップ８０２で、サービスシステム１０５は、イベントデータストリームを監視することができる。図１１に関連してさらに説明するように、イベントデータストリームを監視するために、サービスシステム１０５は、ストリームキャプチャアプリケーションを構成し、および／またはＫａｆｋａクラスタを設定することができる。データストリームは、サービスシステム１０５との他の対話のうち、トランザクション、サービス要求、情報要求、発注を含むことができる。
【０１３５】
ステップ８０４で、サービスシステムは、外部ドメインまたはサーバーからイベントを受信および／または識別することができる。識別されたイベントは、ステップ８０２で監視されるデータストリームの一部であってもよい。イベントは、例えば、電子決済情報、小売業者、製品、および金額を含むトランザクション要求であってもよい。
【０１３６】
ステップ８０６で、サービスシステムは、受信したイベントからイベントキーおよび値を抽出することができる。抽出されたキーは、抽出されたキーを含むことができ、ＩＰアドレス、電子メールアドレス、または電話番号のうちの少なくとも１つを含むことができる。
【０１３７】
しかし、図１１に関連してさらに説明するように、キー／値ペア抽出の代替方法もまた可能であり得る。さらに、ステップ８０６におけるキー抽出は、予め定義されたトピックのグループに基づくことができる。予め定義されたトピックは、トランザクション金額、トランザクション場所、アカウント情報などのトランザクションの特性を含むことができる。いくつかの実施形態では、ステップ８０６は、値を抽出して値の配列を生成することも含むことができる。
【０１３８】
ステップ８１０で、サービスシステム１０５は、イベントが状態変数に関連しているかどうかを判定することができる。サービスシステム１０５は、ルックアップテーブルまたは同様のデータ構造を使用して、ステップ８０８のアカウントに関連する状態変数を識別することができる。状態変数は、一定の時間複雑度でアクセスされるように構成され得る。例えば、入力サイズに関係なく一定時間で実行されるＯ（１）複雑度を有する演算器を使用する。
【０１３９】
いくつかの実施形態では、サービスシステム１０５は、イベント内のキーが、ステップ８０８で識別されたアカウントに関連する状態変数を変更すべきかどうかを判定することができる。例えば、イベントがトランザクションであり、状態変数で監視されている金額を含む場合には、サービスシステム１０５は、イベントが状態変数に関連付けられていると判定することができる（ステップ８１０：はい）。しかし、イベントが新しいアカウントの要求、またはパスワードを忘れた要求である場合には、サービスシステム１０５は、イベントが状態変数に関連付けられていないと判定することができる（ステップ８１０：いいえ）。さらに、ステップ８０８で識別されたアカウントがどの状態変数にも関連しない場合には、サービスシステム１０５はまた、イベントが状態変数に関連付けられていないと判定することができる（ステップ８１０：いいえ）。
【０１４０】
サービスシステム１０５が、イベントが状態変数に関連付けられていないと判定した場合（ステップ８１０：ｎｏ）には、プロセス８００は、ステップ８０２に戻り、次のトリガイベントをキャプチャするためにデータストリームの監視を継続することができる。しかし、サービスシステム１０５が、イベントが状態変数に関連していると判定した場合（ステップ８１０：はい）には、プロセス８００は、ステップ８１２に進み、そこでサービスシステム８１２は、識別された状態変数が既存のイベントを含むかどうかを判定する。
【０１４１】
識別された状態変数が既存のイベントを含む場合（ステップ８１２：はい）には、プロセッサ８２０は、ステップ８２０に進み、ウィンドウ長を決定または検索することができる。ウィンドウ長は、状態変数に対して予め定義されていてもよく、タイムウィンドウまたはイベント数ウィンドウであってもよい。例えば、ウィンドウは、３０分のウィンドウ、３０秒のウィンドウ、２４時間のウィンドウ、または異なる組み合わせであってもよい。あるいは、またはさらに、ウィンドウ長は、トランザクションの数に基づいてもよい。例えば、状態変数に１００イベントしか考慮できない場合、イベント１０１が処理されると、ウィンドウの外に出るため、イベント１を削除することができる。このような構成により、Ｏ（１）複雑度の動作を強制し、待ち時間を短縮することを可能にすることができる。
【０１４２】
サービスシステム１０５は、ステップ８２２に進み、状態変数に影響を与える既存のイベントのコールバックの記録されたタイムスタンプ、タイマーを決定または識別することができる。例えば、状態変数を更新する場合、アキュムレータ３４８（図３）は、イベントが期限切れになったときに、累積状態変数からイベントを撤回するためにタイマーまたはコールバックを登録することができる。したがって、ステップ８２２で、サービスシステム１０５は、記録されたタイマーまたはタイムスタンプを識別することができる。
【０１４３】
ステップ８２４で、サービスシステム１０５は、ステップ８２０で決定されたウィンドウの外側にタイムスタンプ、タイマー、またはコールバックを有するイベントを廃棄することができる。例えば、イベントの有効期限が切れた場合（例えば、タイムスタンプがウィンドウの外にある場合）、サービスシステムは、期限切れイベントからの影響を取り除くために状態変数を更新する必要があると判断することができる。ステップ８２６で、サービスシステム１０５は、期限切れイベントの影響を取り除くことによって状態変数を更新することができる。例えば、サービスシステム１０５は、廃棄されたイベントを差し引くことによって状態変数を更新することができる。あるいは、またはさらに、ステップ８２４は、状態変数に蓄積された既存のイベントのタイムスタンプを取得し、タイムウィンドウの下限よりも古いタイムスタンプを有する既存のイベントを削除するシーケンスを含むことができる。
【０１４４】
識別された状態変数が既存のイベントを含まない場合（ステップ８１２：はい）、または状態変数が更新されて期限切れイベントの影響を取り除くと（ステップ８２６の後）、プロセス８００はステップ８３０に進むことができ、そこでサービスシステム１０５が新しいイベントまたはトリガイベントに基づいて状態変数を更新する。例えば、サービスシステム１０５は、イベントの量または値に比例して状態変数に追加することによって、トリガイベントの影響を蓄積することができる。したがって、いくつかの実施形態では、プロセス８００は、状態変数にトリガイベントを蓄積し、状態変数にイベントのタイムスタンプを登録し、状態変数から期限切れイベントを廃棄することによって、状態変数を更新することができる。さらに、いくつかの実施形態では、トリガイベントに基づく状態変数への増分は、トリガイベントの値に比例することができる。したがって、ステップ８３０で、サービスシステム１０５は、トランザクション値に比例するイベントにスコアを割り当て、割り当てられたスコアに基づいて状態変数の値を増加させる動作を実行することができる。
【０１４５】
ステップ８３２で、サービスシステム１０５は、状態変数におけるトリガイベントの影響について、タイムスタンプ、タイマー、またはコールバックを登録することができる。
【０１４６】
ここで図９を参照すると、開示された実施形態と一致する、多変数アラートプロセス９００を示すフローチャートが示されている。プロセス９００は、データストリームを監視するときにサービスシステム１０５によって実行され得る。例えば、プロセス９００は、データストリーム内のイベントから抽出されたキーおよび値を用いて、リアルタイム状態計算器１２０によって実行され得る。
【０１４７】
ステップ９０２で、サービスシステム１０５は、複数の状態変数を収集または受信することができる。これらの状態変数は、Ｏ（１）の複雑度を有する演算器を使用してアクセスするように構成され得る。例えば、ステップ９０２で収集された変数は、１次元配列または固定長スタックであってもよい。さらに、ステップ９０２の変数は、イベントからのキー／値ペア抽出中に抽出された異なるキーを表すことができる。例えば、ステップ９０２の状態変数は、トランザクション金額アキュムレータ、トランザクションの頻度、トランザクション起源、または電子トランザクションに関連し得る同様のパラメータを含むことができる。あるいは、またはさらに、ステップ９０２は、データベースからアカウントに関連する複数の状態変数を検索することを含むことができ、複数の状態変数の各々は、Ｏ（１）演算器（ａｒｒａｙ：ａｃｃｅｓｓｉｎｇ  ａｎｙ  ｅｌｅｍｅｎｔなどの入力サイズに関係なく一定時間で実行されるアルゴリズムを有する演算器）でアクセスされるように構成される。
【０１４８】
ステップ９０４で、サービスシステム１０５は、状態変数に基づいて多変数予測のためのモデルおよび／または規則を検索することができる。例えば、サービスシステム１０５は、複数の状態変数を処理するために、予測モデル生成器３４２（図３）からランダムフォレストおよび／またはニューラルネットワークモデルを検索することができる。複雑度の低い演算器で変数にアクセスできるため、予測モデルをすばやく実行して予測を提供することができる。ステップ９０４で検索されるモデルは、オフラインまたはオンラインで開発することができる。例えば、ステップ９０４のモデルは、以前に収集されたイベントに基づいてオフラインでサービスシステム１０５によって生成され得るが、検証データセットに基づいて所望の精度を達成すると、オンライン動作のために実装され得る。
【０１４９】
ステップ９０６で、サービスシステム１０５は、不正行為アセスメントのためのモデルまたは規則を検索することができる。例えば、サービスシステム１０５は、計算器メモリ３５０から、不正行為の確率と相関させることができるしきい値確率または累積量に関連する１つまたは複数の規則を検索することができる。いくつかの実施形態では、不正行為アセスメントの規則は、潜在的な不正行為を示すしきい値を指定することができる。
【０１５０】
ステップ９０８で、サービスシステム１０５は、データストリーム内のイベントに重みまたはスコアを割り当てることができる。例えば、サービスシステム１０５は、抽出されたキーを用いてイベントに重みを割り当てる動作を実行することができる。いくつかの実施形態では、特定の変数は、他の変数よりも不正行為をより示唆することができる。例えば、トランザクションで費やされた金額に関連するイベントは、トランザクションのタイプのイベントよりも高い予測値を有し得るが、これは、費やされた金額がトランザクションのタイプよりも不正行為を示すことができるためである。対照的に、小売業者のタイプまたは通貨などのパラメータに関連する他のイベントは、不正行為の問い合わせとの関連性が低い場合がある。したがって、サービスシステム１０５は、実行されている予測またはアセスメントのタイプに基づいて異なるイベントに重みを追加し、関連性の高いイベントに高い重みを割り当て、関連性の低いトランザクションに低い重みを割り当てることができる。ステップ９０８におけるイベントへの重み付けの割り当ては、図１２に関連してさらに説明されるプロセスに基づくことができる。
【０１５１】
ステップ９１０で、サービスシステム１０５は、ステップ９０８の修正された変数を用いて、ステップ９０４〜ステップ９０６の検索されたモデルを使用して、データストリームのリアルタイム解析を実行することができる。そのような実施形態では、サービスシステム１０５は、修正された状態変数に基づいて予測または不正行為の確率を計算することができる。例えば、サービスシステム１０５は、ステップ９１０で予測モデルを使用して不正行為の確率を計算することができ、予測モデルは、ランダムフォレストまたは畳み込みニューラルネットワークのうちの少なくとも１つを含む。
【０１５２】
ステップ９１５で、サービスシステム１０５は、予測モデルが定義されたしきい値を超える確率を返したかどうかを判定することができる。例えば、不正行為／リスク検出サービス３４４は、ステップ９１０からの結果をリアルタイムで監視して、不正行為または異常の推定確率の１つがしきい値を超えているかどうかを識別することができる。サービスシステム１０５が、推定された確率がしきい値を超えていると判定した場合（ステップ９１５：はい）には、プロセス９００は、ステップ９１６に進み、複数の解析された変数に関連するアカウントに対してアラートをトリガすることができる。しかし、サービスシステム１０５が、推定された予測モデルが定義されたしきい値を超える確率をもたらさなかったと判定した場合（ステップ９１５：いいえ）には、プロセス９００はステップ９１８に進み、アラートをトリガしない。変数の累積構成が少ないため、様々なストリームにリソースをシームレスに割り当てることができ、リアルタイム処理と予測モデル生成のハードウェア要件が緩和される。
【０１５３】
ここで図１０を参照すると、開示された実施形態と一致する、クライアント要求プロセス１０００への応答を示すフローチャートが示されている。プロセス１０００は、例えば、クライアントシステム１９０またはクライアントデバイス１５０から要求を受信するときに、サービスシステム１０５によって実行され得る。例えば、プロセス１０００は、ネットワーク１７０を介してシステム１００の構成要素と対話することができるクライアント要求インターフェース１３０によって実行され得る。
【０１５４】
ステップ１００２で、サービスシステム１０５は、ＡＰＩを使用してトランザクション要求を受信することができる。例えば、クライアントシステム１９０は、ＡＰＩマネージャ４４４（図４）によってサポートされるＡＰＩを使用して、サービスシステム１０５に要求を送信することができる。要求は、承認要求、発注、または情報の要求のいずれかを含むことができる。
【０１５５】
ステップ１００４で、サービスシステム１０５は、ステップ１００２の要求をアカウントまたはクライアントに関連付けることができる。例えば、サービスシステム１０５は、要求内の情報をクライアント登録情報４４６と相関させることができ、またはインターフェースメモリ４３０（図４）に問い合わせて、要求を１つまたは複数のアカウントに関連付けることができる。
【０１５６】
ステップ１００６で、サービスシステム１０５は、ステップ１００４で識別された１つまたは複数のアカウントに対してアラートが発行されたかどうかを判定することができる。例えば、クライアント認証器４４２（図４）は、不正行為／リスク検出サービス３４４（図３）が、ステップ１００２からの要求に関連するアカウントに対してアラートを生成したかどうかを判定することができる。アカウントがアラートに関連付けられている場合（ステップ１００６：はい）には、プロセス１０００はステップ１００８に進むことができ、サービスシステム１０５は、トランザクションまたは要求を拒否する応答をクライアントシステム１９０に送信することができる。この構成により、サービスシステム１０５は、危険にさらされたアカウントとのさらなる対話を防ぐために、ＡＰＩおよびインターフェース要素を構成すると同時に、リアルタイムの疑わしい振る舞いを捕捉することができる。しかし、ステップ１００６で、サービスシステムが、アカウントがアラートに関連付けられていないと判定した場合（ステップ１００６：いいえ）には、プロセス１０００は、ステップ１０１０に進み、トランザクションを受け入れる応答をクライアントシステム１９０に送信することができる。
【０１５７】
いくつかの実施形態では、プロセス１０００は、ステップ１０１２を含むことができ、サービスシステム１０５は、次のイベントをストリームに追加することができ、イベントが識別されたアカウントに関連付けられるというメッセージをブローカ２３４（図２）に送信することができる。ステップ１０１０でトランザクションまたは要求が承認されると、承認を受信したクライアントシステム１９０に関連するデータストリームに対して新しいイベントが生成され得る。したがって、追加の処理ステップを減らし、計算の複雑度を減らすために、ステップ１０１２で、サービスシステム１０５は、識別されたアカウントに関連する新しいイベントが生成され得ることをブローカ２３４またはリアルタイム状態計算器１２０（図１）の他の要素に通知することができる。それに応じて、ブローカ２３４、またはリアルタイム状態計算器１２０の他の要素は、新しい潜在的なイベントのためにトピックまたはワークフローを初期化することができる。
【０１５８】
ここで図１１を参照すると、開示された実施形態と一致する、例示的なストリームキャプチャ構成プロセス１１００を示すフローチャートが示されている。プロセス１１００は、例えば、クライアントシステム１９０またはクライアントデバイス１５０によって生成されるデータストリーム内のイベントを処理しながら、サービスシステム１０５によってリアルタイムで実行され得る。例えば、プロセス１１００は、ストリーム演算器１１０によって実行され得る。
【０１５９】
ステップ１１０２で、サービスシステム１０５は、１つまたは複数のストリームキャプチャアプリケーションを構成することができる。ストリームキャプチャアプリケーションの構成は、Ｊａｖａインスタンスの作成、パラメータの設定、およびインスタンスパラメータの構築を含むことができる。例えば、ステップ１１０２で、サービスシステム１０５は、以下のような動作を実行することができる。
ｉｍｐｏｒｔ  ｊａｖａ．ｕｔｉｌ．Ｐｒｏｐｅｒｔｉｅｓ；
ｉｍｐｏｒｔ  ｏｒｇ．ａｐａｃｈｅ．ｋａｆｋａ．ｓｔｒｅａｍｓ．ＳｔｒｅａｍｓＣｏｎｆｉｇ；
Ｐｒｏｐｅｒｔｉｅｓ  ｓｅｔｔｉｎｇｓ＝ｎｅｗ  Ｐｒｏｐｅｒｔｉｅｓ（）；
ｓｅｔｔｉｎｇｓ．ｐｕｔ（ＳｔｒｅａｍｓＣｏｎＦｉｇＡＰＰＬＩＣＡＴＩＯＮ＿ＩＤ＿ＣＯＮＦＩＧ，“ｍｙ−ｆｉｒｓｔ−ｓｔｒｅａｍｓ−ａｐｐｌｉｃａｔｉｏｎ”）；
ｓｅｔｔｉｎｇｓ．ｐｕｔ（ＳｔｒｅａｍｓＣｏｎＦｉｇＢＯＯＴＳＴＲＡＰ＿ＳＥＲＶＥＲＳ＿ＣＯＮＦＩＧ，“ｋａｆｋａ−ｂｒｏｋｅｒ１：９０９２”）；
ｓｅｔｔｉｎｇｓ．ｐｕｔ（．．．，．．．）；
ＳｔｒｅａｍｓＣｏｎｆｉｇ  ｃｏｎｆｉｇ＝ｎｅｗ  ＳｔｒｅａｍｓＣｏｎｆｉｇ（ｓｅｔｔｉｎｇｓ）；
【０１６０】
ステップ１１０２でストリームキャプチャアプリケーションの構成のために選択されたパラメータは、「ａｐｐｌｉｃａｔｉｏｎ．ｉｄ」および「ｂｏｏｔｓｔｒａｐ．ｓｅｒｖｅｒｓ」などの必要な構成パラメータを含むことができる。それに加えて、またはその代わりに、ステップ１１０２における構成のためのパラメータは、「ｄｅｆａｕｌｔ．ｄｅｓｅｒｉａｌｉｚａｔｉｏｎ．ｅｘｃｅｐｔｉｏｎ．ｈａｎｄｌｅｒ」、「ｄｅｆａｕｌｔ．ｐｒｏｄｕｃｔｉｏｎ．ｅｘｃｅｐｔｉｏｎ．ｈａｎｄｌｅｒ」、「ｄｅｆａｕｌｔ．ｋｅｙ．ｓｅｒｄｅ」、「ｄｅｆａｕｌｔ．ｖａｌｕｅ．ｓｅｒｄｅ」、「ｎｕｍ．ｓｔａｎｄｂｙ．ｒｅｐｌｉｃａｓ」、「ｎｕｍ．ｓｔｒｅａｍ．ｔｈｒｅａｄｓ」、「ｐａｒｔｉｔｉｏｎ．ｇｒｏｕｐｅｒ」、「ｐｒｏｃｅｓｓｉｎｇ．ｇｕａｒａｎｔｅｅ」、「ｒｅｐｌｉｃａｔｉｏｎ．ｆａｃｔｏｒ」、および「ｔｉｍｅｓｔａｍｐ．ｅｘｔｒａｃｔｏｒ」を含むことができる。さらに、キャプチャアプリケーションの構成用のパラメータは、プロデューサ構成パラメータ（例えば「Ｎａｍｉｎｇ、Ｄｅｆａｕｌｔ  Ｖａｌｕｅｓ、ｅｎａｂｌｅ．ａｕｔｏ．ｃｏｍｍｉｔ、ｒｏｃｋｓｄｂ．ｃｏｎＦｉｇｓｅｔｔｅｒ」）または弾力性のための推奨構成パラメータ（例えば「ｒｅｐｌｉｃａｔｉｏｎ．ｆａｃｔｏｒ」）を含むことができる。
【０１６１】
構成されたキャプチャアプリケーションは、特定のタイプのイベントを具体的にキャプチャし、キーを識別し、リアルタイム処理に使用できるキーと値のペアを決定することができる。あるいは、またはさらに、ステップ１１０４で、サービスシステム１０５は、１つまたは複数のストリームキャプチャアプリケーションを構成することと、各キャプチャアプリケーションに１つまたは複数のブローカを割り当てることと、各ブローカでイベント情報をＯ（１）演算器でアクセス可能な変数に変換するように定義することと、を含む、一連の動作を実行することができる。
【０１６２】
ステップ１１０４で、サービスシステム１０５は、１つまたは複数のブローカ２３４（図２）を各キャプチャアプリケーションに割り当てることができる。例えば、サービスシステム１０５は、ブローカ２３４の現在のパーティション割り当てをチェックして、それらのワークロードを決定することができる。そうするために、サービスシステム１０５は、ブローカ２３４の配置を識別するためにスクリプトを使用することができる。サービスシステム１０５はまた、例えば「ｒｅａｓｓｉｇｎ−ｐａｒｔｉｔｉｏｎｓ．ｊｓｏｎ」ファイルをフォーマットするためにスクリプト言語を使用してパーティションに基づいて要素を再割り当てすることによって、パーティションに基づいてキャプチャアプリケーションを割り当て続けることができる。
【０１６３】
ステップ１１０４で、サービスシステム１０５はまた、より弾力性のある計算のためにレプリカブローカ２３４へのトピックの再割り当てを実行することができ、割り当てを検証することができる。
【０１６４】
ステップ１１０６で、サービスシステム１０５は、ステップ１１０４でブローカ２３４の割り当て中に作成されたトピックに基づいてイベント内の情報を変換するためにシリアライザまたはデシリアライザを定義することができる。例えば、サービスシステム１０５は、以下のコマンドを実行して、リアルタイムデータストリームで処理するシリアライザおよびデシリアライザをセットアップすることができる。
ｐｕｂｌｉｃ  ｃｌａｓｓ  Ｕｓｅｒ  ｛
ｐｒｉｖａｔｅ  Ｓｔｒｉｎｇ  ｃｌｉｅｎｔＩＤ；
ｐｒｉｖａｔｅ  ｉｎｔ  ａｍｏｕｎｔ；
ｐｕｂｌｉｃ  Ｕｓｅｒ（）｛
｝
ｐｕｂｌｉｃ  Ｕｓｅｒ（Ｓｔｒｉｎｇ  ｃｌｉｅｎｔＩＤ，ｉｎｔ  ａｍｏｕｎｔ）｛
ｔｈｉｓ．ｃｌｉｅｎｔＩＤ＝ｃｌｉｅｎｔＩＤ；
ｔｈｉｓ．ａｍｏｕｎｔ＝ａｍｏｕｎｔ；
｝
ｐｕｂｌｉｃ  Ｓｔｒｉｎｇ  ｇｅｔｃｌｉｅｎｔＩＤ（）｛
ｒｅｔｕｒｎ  ｔｈｉｓ．ｃｌｉｅｎｔＩＤ；
｝
ｐｕｂｌｉｃ  ｉｎｔ  ｇｅｔａｍｏｕｎｔ（）｛
ｒｅｔｕｒｎ  ｔｈｉｓ．ａｍｏｕｎｔ；
｝
＠Ｏｖｅｒｒｉｄｅ  ｐｕｂｌｉｃ  Ｓｔｒｉｎｇ  ｔｏＳｔｒｉｎｇ（）｛
ｒｅｔｕｒｎ  “Ｕｓｅｒ（”＋ｃｌｉｅｎｔＩＤ＋“，”＋ａｍｏｕｎｔ＋“）”；
｝
＠Ｏｖｅｒｒｉｄｅ  ｐｕｂｌｉｃ  ｂｙｔｅ［］  ｓｅｒｉａｌｉｚｅ（Ｓｔｒｉｎｇ  ａｒｇ０，Ｕｓｅｒ  ａｒｇ１）｛
ｂｙｔｅ［］  ｒｅｔＶａｌ＝ｎｕｌｌ；
ＯｂｊｅｃｔＭａｐｐｅｒ＝ｎｅｗ  ＯｂｊｅｃｔＭａｐｐｅｒ（）；
ｔｒｙ  ｛ｒｅｔＶａｌ＝ｏｂｊｅｃｔＭａｐｐｅｒ．ｗｒｉｔｅＶａｌｕｅＡｓＳｔｒｉｎｇ（ａｒｇ１）．ｇｅｔＢｙｔｅｓ（）；
｝
【０１６５】
ステップ１１０８で、サービスシステム１０５は、ステップ１１０４でのブローカ２３４の割り当ての結果として、トピックのための１つまたは複数のストリームオブジェクトを作成することができる。ステップ１１０８で作成されたオブジェクトは、データストリームに基づくことができる。例えば、ステップ１１０８で作成されたオブジェクトは、単一のプロデューサインスタンスを共有することができる。オブジェクトは、オブジェクトを定義する関数を使用して作成することができる。例えば、ステップ１１０８で、サービスシステム１０５は、「ＯｂｊｅｃｔＲｅｃｏｒｄ（ｊａｖａ．ｌａｎｇ．Ｓｔｒｉｎｇ  ｔｏｐｉｃ，ｊａｖａ．ｌａｎｇ．Ｉｎｔｅｇｅｒ  ｐａｒｔｉｔｉｏｎ，Ｋ  ｋｅｙ，Ｖ  ｖａｌｕｅ）」を使用して、キー／値ペアオブジェクトを生成し、ブローカ２３４の指定されたトピックおよびパーティションに送信される記録を作成することができる。あるいは、またはさらに、サービスシステム１０５は、「ＯｂｊｅｃｔＲｅｃｏｒｄ（ｊａｖａ．ｌａｎｇ．Ｓｔｒｉｎｇ  ｔｏｐｉｃ，Ｋ  ｋｅｙ，Ｖ  ｖａｌｕｅ）」のコマンドを使用して、ストリーム演算器１１０および／またはＫａｆｋａなどのリアルタイムプロセッサに送信する記録を作成することができる。さらに、ステップ１１０８で、サービスシステム１０５は、「ＯｂｊｅｃｔＲｅｃｏｒｄ（ｊａｖａ．ｌａｎｇ．Ｓｔｒｉｎｇ  ｔｏｐｉｃ，Ｖ  ｖａｌｕｅ）」などのコマンドを使用してストリームオブジェクトを作成し、キーのない記録を作成することができる。
【０１６６】
ステップ１１１０で、サービスシステム１０５は、ストリーム内でイベントを順次処理することができる。キー／値のペアならびにトピック構成およびパーティションに基づいて、プロセスは、異なるトピックに基づいて並列化されたブローカ２３４を使用することによって効率的に実行され得る。ステップ１１１０で、処理は、定義された順序なしで同時に処理することができるデータのパーティションを使用することによって並行して実行され得る。
【０１６７】
ステップ１１１２で、サービスシステム１０５は、キー／値イベントをアカウントおよびそれらに関連する状態変数に関連付けることができる。状態変数は、キー／値に基づいて更新することができ、サービスシステム１０５は、メモリ使用率を最小化するために状態変数の単一のコピーを格納し、Ｏ（１）複雑度の演算器を使用してそれらにアクセスする能力を強制するように変数を構成することができる。したがって、ステップ１１１２で、キャプチャアプリケーションを構成し、順次イベントを処理した後に、サービスシステム１０５は、データストリームを監視する複雑度の低い状態変数を格納することができる。
【０１６８】
ここで図１２を参照すると、開示された実施形態と一致する、予測モデル構成プロセス１２００を示すフローチャートが示されている。プロセス１２００は、サービスシステム１０５によって実行され得る。例えば、プロセス１２００は、計算器プロセッサ３４０（図３）の予測モデル生成器３４２によって実行されてもよく、例えば、畳み込みニューラルネットワークを使用して変数を相関させることにより、予測モデルを生成するように構成されてもよい。
【０１６９】
ステップ１２０４で、サービスシステム１０５は、トレーニングデータセットの特徴に基づいて入力アレイを生成することができる。ステップ１２０６で、サービスシステム１０５は、トレーニングデータセットのキー／値に基づいて出力ベクトルを生成することができる。
【０１７０】
ステップ１２０４で、サービスシステムは、ステップ１２１４における推定出力およびコスト関数を計算することができる。ステップ１２２０で、サービスシステム１０５は、コスト関数がユーザによって指定され得る必要な精度のしきい値より小さいかどうかを判定することができる。サービスシステム１０５が、コスト関数がしきい値を下回っておらず、必要な精度が達成されていないと判定した場合には、サービスシステム１０５は、ステップ１２２２に進み、モデルを更新することができる。しかし、コスト関数がしきい値を下回っている場合（ステップ１２２０：はい）、サービスシステム１０５はモデルを受け入れることができる。
【０１７１】
図１３は、開示された実施形態による、予測モデルトレーニングプロセス１３００を示す例示的なフローチャートである。いくつかの実施形態では、サービスシステム１０５は、プロセス１３００を実行することができる。例えば、リアルタイム状態計算器１２０は、プロセス１３００を実行することができる。
【０１７２】
ステップ１３０２で、サービスシステム１０５は、予測モデルの要求を受信することができる。いくつかの実施形態では、要求は、ターゲット状態変数または特定のクライアントシステム１９０を指定することができる。要求は、クライアントデバイス１５０に関する情報を含むことができる。
【０１７３】
ステップ１３０４で、サービスシステム１０５は、モデリングデータセットを生成することができる。サービスシステム１０５は、データベース１８０、オンラインリソース１４０、および／またはクライアントデバイス１５０からの情報を使用してトレーニングデータセットを生成することができる。例えば、サービスシステム１０５は、データベース１８０から、クライアントデバイス１５０のユーザが不正であると報告したアカウントに関連するトランザクションおよびイベントを検索することができる。
【０１７４】
ステップ１３０６で、サービスシステム１０５は、ステップ１３０４で生成されたモデリングデータセットを分割することによって、モデリングデータサブセットを作成することができる。いくつかの実施形態では、サービスシステム１０５は、トレーニングデータセットをランダムに分割して、ランダムなトレーニングサブセットを作成し、サブセットをテストすることができる。次に、モデリングデータセットのランダムに選択されたサブセットを使用して予測モデルを生成することができる。トレーニングデータサブセットの要素は、独立したトレーニングデータサブセットを作成するために、各サブセットに固有のものとすることができる。あるいは、トレーニングデータサブセットが要素を共有して重複してもよい。他の実施形態では、サービスシステム１０５は、分割規則を使用してトレーニングデータセットを分割することができる。トレーニングデータセットの分割規則は、分割の数および／または異なるグループ間の比率を示すことができる。例えば、トレーニングデータセットは、テストおよび検証データ用に８０／２０分割を使用して分割することができる。
【０１７５】
モデリングデータセットの分割に基づいて、サービスシステム１０５は、ステップ１３０７で分類器を選択することができる。サービスシステム１０５はまた、ステップ１３０６のモデリングデータセットを処理して、予測モデルの係数（ステップ１３０８）およびハイパーパラメータ（ステップ１３１０）を決定することができる。予測モデルは、パラメトリック、ノンパラメトリック、またはセミパラメトリックであってもよい。いくつかの実施形態では、サービスシステム１０５は、不正行為の確率を識別するための予測モデルとして複数の決定木を作成することができる。他の実施形態では、サービスシステム１０５は、ニューラルネットワーク（図１２に関連してさらに説明される）、データハンドリングのグループ方法（ＧＭＤＨ）アルゴリズム、ナイーブベイズ分類器、および／または多変量適応回帰スプラインを生成することができる。
【０１７６】
ステップ１３１４で、サービスシステム１０５は、モデルが完了したかどうか、またはモデルが停止基準に達したかどうかを評価することができる。例えば、サービスシステム１０５が決定木を生成すると、ステップ１３１４で、サービスシステム１０５は、エンドノードについて停止基準が満たされているかどうかを評価することができる。いくつかの実施形態では、停止基準は、モデルに固有であるか、またはハイパーパラメータによって定義され得る。
【０１７７】
停止基準が満たされない場合には、サービスシステム１０５は、ステップ１３１６に進み、新しい変数またはパラメータを選択して、新しい分類器を決定することができる。あるいは、停止基準が満たされると、サービスシステム１０５は、ステップ１３１８に進むことができ、そこでサービスシステム１０５は、トレーニングデータセットの一部を使用してモデルの精度を計算することができる。
【０１７８】
ステップ１３２０で、サービスシステム１０５は、モデルの精度が精度しきい値を超えているかどうかを評価することができる。いくつかの実施形態では、モデルの精度しきい値は、予測モデルに設定された最適化目標に基づいて自動的に調整され得る。モデルがしきい値を超えていない場合（ステップ１３２０：いいえ）には、ステップ１３２６でモデルを破棄することができる。計算された精度がしきい値を超えている場合（ステップ１３２０：はい）には、サービスシステム１０５は、ステップ１３２２でモデルに加重係数を割り当て、ステップ１３２４でモデルのセットにモデルを含めることができる。加重係数は、計算された精度に関連付けられてもよい。例えば、加重係数は精度に比例してもよい。
【０１７９】
プロセス１３００を複数回繰り返して、複数のモデルを生成することができる。いくつかの実施形態では、サービスシステム１０５は、最小のモデルが生成されるまでプロセスを繰り返すことができる。
【０１８０】
図１４Ａは、開示された実施形態による、時間の関数としての例示的な状態変数の値のグラフを示す。図１４Ａに示す状態変数は、トランザクション値（例えば、トランザクションに費やされた金額）を累積するように構成され得る。さらに、状態変数は、イベントが３０分より古い場合にイベントの影響を取り除くように構成することができる。さらに、図１４Ａに記載された状態変数は単一の値を格納するので、それが長期または短期のどちらを監視するかに関係なく、時間複雑度は常にＯ（１）である。
【０１８１】
図１４Ａは、状態変数が時間の関数として４回変化することを示している。時刻１４０２で、状態変数は０から３０，０００ドルに変化する。この変化は、データストリーム内のイベントが状態変数の変化をトリガしたときに発生することができる。例えば、ストリーム演算器１１０は、アカウントに関連するイベントからキー／値を抽出することができる。次に、アカウントは、図１４Ａに示す状態変数に関連付けられる。したがって、リアルタイム状態計算器１２０は、トリガイベントに従って、識別されたアカウントに関連する変数を更新することができる。この場合、トリガイベントには３０，０００ドルのトランザクションが含まれ、状態変数が更新される。例えば、アキュムレータ３４８は、トリガイベントを受信したときに変数を更新することができる。さらに、図１４Ａにも示されているように、タイムスタンプをイベントに関連付けることができる。図１４Ａに示す例では、時刻１４０２のトランザクションは、「１３：０１」タイムスタンプに関連付けられ得る。例えば、アキュムレータ３４８は、状態変数の変更をタイムスタンプまたはコールバックで登録して、それが期限切れになったときに状態変数におけるその影響を削除することができる。
【０１８２】
状態変数は、サービスシステム１０５が同じアカウントに関連する第２のトランザクションイベントを受信する時刻１４０６で再び更新され得る。第２のトランザクションは６０，０００ドルになり得る。第１のトランザクション（時刻１４０２）と第２のトランザクション（時刻１４０６）を累積すると、状態変数の累積値は９０，０００ドルになる。絶対値ではなく差分変化に焦点を当てたこの変数の累積により、イベントをリアルタイムで処理するために必要な計算の数が最小限に抑えられる。さらに、単一の値の計算が高速であるため、状態変数は、Ｏ（１）アルゴリズムを使用して状態変数を更新、監視、または解析するのを容易にする。
【０１８３】
状態変数は、第１のイベントが期限切れになる時刻１４１０に再び更新され得る。この状態変数は３０分のタイムウィンドウで構成されたので、第１のイベント（時刻１４０２）から３０分が経過した後、サービスシステム１０５は、イベントの影響を除去することができる。したがって、時刻１４１０で、第１のイベント（３０，０００ドルの値）の影響が３０分後に期限切れになったため、状態変数の値が９０，０００ドルから６０，０００ドルに減少することができる。図１４Ａの例示的な実施形態は、３０分の時刻１４０２でのイベントのコールバック時刻を示しているが、他のコールバック時刻は、システム１００の特性に基づいて実装され得る。新しいイベントとコールバックによってトリガされるさらなる計算は、既存の変数を利用して迅速な決定でリアルタイムの決定を行うことができる内部規則エンジンを作成するので、異常または不正な振る舞いを識別するのに十分であり得る。例えば、可変計算速度の９９．９パーセンタイルは２０ミリ秒以内であり得るので、新しいイベントとコールバックによってトリガされる計算で十分である。
【０１８４】
いくつかの実施形態では、図１４Ａに示すように、有効期限は自動的であってもよい。すなわち、イベントが期限切れになるとすぐに、状態変数が変更される。しかし、コンピュータリソースを節約し、コンピュータの動作を改善するために、他の実施形態では、状態変数はトリガイベントがある場合にのみ更新されてもよい。そのような実施形態では、トリガイベントがサービスシステム１０５によって受信されると、最初に、変更される変数のいずれかのイベントが期限切れであるかどうかを評価し、期限切れイベントの影響を取り除き、次にトリガイベントに基づいて変数を変更することができる。図１４Ｂに関連してさらに説明されるこの構成は、計算の数およびメモリへのアクセスを最小化することができる。
【０１８５】
状態変数は、第２のイベントが期限切れになったときに４回目の更新がされ得る。時刻１３：４５に、第２のイベントは３０分のタイムウィンドウ上にはないので、期限切れになった。したがって、第１および第２のイベントが期限切れになったため、システムサービス１０５が第２のイベントの影響を除去することができ、状態変数は０ドルの値に戻る。
【０１８６】
図１４Ａに示すような状態変数の構成は、ある期間にわたる一連のイベントの蓄積を可能にする。同様の状態変数は、イベントから抽出される様々なキーに実装され得る。例えば、他の状態変数を使用してトランザクション頻度を監視することができる。さらに、図１４Ａの状態変数は定量的情報を格納するが、他の状態変数または累積変数は、トランザクションの場所などの定性的情報を格納するか、または、例えば、アクティブアカウントと非アクティブアカウントの間で変化するバイナリ変数を含むことができる。
【０１８７】
図１４Ａは、しきい値１４２０をさらに示す。変数が所定のしきい値を超えると、異常な振る舞いまたは潜在的な不正行為を示すアラートが生成され得る。例えば、図１４Ａでは、状態変数は、時刻１４０６のトリガイベントでしきい値１４２０を超えた。この時点で、累積金額の状態変数は、アカウントが高速または高価格のトランザクションに関連付けられていることを示す。そのような実施形態では、リアルタイム状態計算器１２０（図３）は、アカウント内のさらなるトランザクションを防止するために使用され得るアラートを（例えば、不正行為／リスク検出サービス３４４により）生成することができる。例えば、時刻１４０６において、累積値がしきい値１４２０を超えるため、クライアント要求インターフェース１３０（図４）は、状態変数に関連するアカウントからのそれ以上のトランザクションを拒否するように指示され得る。あるいは、またはさらに、図９に関連してさらに説明するように、しきい値１４２０を超えた状態変数は、複数の状態変数を使用して予測を行う、または不正行為の確率を評価する予測モデルの入力であってもよい。そのような実施形態では、サービスシステム１０５は、モデルからの予測が確率しきい値を超えているかどうかを判定することができる。
【０１８８】
図１４Ｂは、開示された実施形態による、時間の関数としての例示的な第２の状態変数の値のグラフを示す。図１４Ａに記載された状態変数と同様に、図１４Ｂに示す状態変数は、トランザクション値（例えば、トランザクションに費やされた金額）を蓄積し、イベントが３０分より古い場合にイベントの影響を除去するように構成され得る。しかし、図１４Ａの状態変数とは異なり、図１４Ｂの状態変数は、トリガイベントが存在する場合にのみ変数を更新するように構成され得る。
【０１８９】
図１４Ａと同様に、図１４Ｂの状態変数は、時刻１４２２、１４２６における第１および第２のトランザクションのトリガイベントに基づいて、状態変数が２回変化することを示している。しかし、第１のイベントが時刻１４３０で期限切れになると、トリガイベントが発生していないため、状態変数は変化しない。したがって、メモリ使用率および計算の数を最小化するために、サービスシステム１０５は、イベントの１つが期限切れになったときに状態変数をすぐに更新しない。したがって、時刻１４３０では、第１のイベントがすでに期限切れになっていても、状態変数の値は変化しない。
【０１９０】
代わりに、状態変数は、時刻１４３２に第３のトリガイベントがあるときに更新される。時刻１４３２において、サービスシステム１０５は、２０，０００ドルの金額で第３のトランザクションを受信することができる。状態変数を更新する際に、サービスシステム１０５は、第１のイベントがすでに期限切れになっていることに気付くことができる。したがって、時刻１４３２での状態変数の更新は、期限切れイベントの削除および新しいイベントの追加を含むことができる。図１４Ｂの例では、イベントを更新することは、第１のイベントから３０，０００ドルの影響を除去すること、および２０，０００ドルを追加することを含む。したがって、状態変数の正味の減少は、時刻１４３２において１０，０００ドルである。
【０１９１】
さらに、時刻１４３４において、第２のイベントが期限切れになったとしても、トリガイベントがなかったので、状態変数は変化しない。この構成では、各イベントは２つの計算に関与しており、１つは累積されたとき、もう１つはイベントが期限切れになったときである。しかし、累積動作と有効期限動作は、トリガイベントがある場合にのみ変数に影響を与えるようにバッチ処理される。
【０１９２】
図１４Ｂはまた、しきい値１４４０を示しており、それは図１４Ａのように第２のトランザクションで超過され、アカウントとの追加のトランザクションを妨げる可能性があるアラートをトリガする。
【０１９３】
図１４Ｃは、開示された実施形態による、時間の関数としての例示的な第３の状態変数の値のグラフを示す。図１４Ａ〜図１４Ｂに記載されている状態変数とは異なり、図１４Ｃに示されている状態変数は、蓄積の代わりに定期的な監視を有する。このタイプの変数は、不正行為について評価されているウィンドウ内のすべてのイベントを考慮して、および／または利用可能な履歴情報を考慮して、包括的な計算を適用する必要がある場合に使用され得る。これは、Ｆｌｉｎｋ（登録商標）またはＳｐａｒｋ（登録商標）を使用して実装でき、固定長ウィンドウまたは間隔で使用することができ、ステータスを判定するために変数が監視される。
【０１９４】
図１４Ｃは、変数が間隔１４５０（１４５０Ａ〜１４５０Ｚ）ごとに監視されることを示している。各インターフェースにおいて、サービスシステム１０５は、変数のステータスを評価して、それがしきい値１４６０を超えたかどうかを決定することができる。トリガイベントは、変数への変更とは無関係であり、代わりに各イベントを個別に監視して異常を判定する。例えば、第１のトランザクションが時刻１４５６にサービスシステム１０５に到着すると、サービスシステムは、イベントおよびその情報を状態変数に追加することができる。次に、時刻１４５８において、新しいイベントがサービスシステム１０５に到達するとき、金額の累積はない。むしろ、サービスシステム１０５は、イベントの各々を別々に含み、過去の傾向を評価する包括的な計算を適用することができる。
【０１９５】
この手法は、アカウントの継続的な概算と永続的な監視を提供することができるが、メモリを頻繁に使用し、より多くの計算リソースを使用する可能性がある。したがって、いくつかの実施形態では、図１４Ｃに示すような非蓄積状態変数は、決定的に重要な特定のキーに対してのみ使用され得る。
【０１９６】
ここで図１５を参照すると、開示された実施形態と一致する、パイプラインデータストリーム処理フロー１５００を示すプロセスフロー図が示されている。いくつかの実施形態では、図１５に示すように、システム１００（図１）の異なる要素は、フロー１５００の特定のステップを実行することができる。例えば、サービスシステム１０５の構成要素は、１つまたは複数のステップを実行することができるが、クライアントシステム１９０などの他のシステムは、他のステップを実行することができる。しかし、他の実施形態では、システム１００の代替要素は、説明されたステップを実行することができ、またはシステム１００の単一の要素は、説明されたステップの１つまたは複数を実行することができる。
【０１９７】
ステップ１５０２で、クライアントシステム１９０は、イベントメッセージをサービスシステム１０５に送信することができる。例えば、支払いクライアントシステム１９０Ａ、メンバークライアントシステム１９０Ｂ、および出荷クライアントシステム１９０Ｃは、ステップ１５０２で、イベントメッセージをサービスシステム１０５に送信することができる。いくつかの実施形態では、メッセージは、予測されたスケジュールなしで同時に受信され得る。しかし、他の実施形態では、メッセージは、バッチで、いくつかの所定のスケジュールに従って受信されてもよい。
【０１９８】
ステップ１５０４で、ブローカ２３４（図２）は、イベントメッセージをデータストリームとして受け入れ、要求されたときにソートされたデータストリームを発信することができる。ステップ１５０６で、フィルタ／ノーマライザ２３２（図２）は、フィルタまたは正規化規則に従って、イベントメッセージを変更するか、またはイベントメッセージを破棄するために、ブローカ２３４のストリームを処理することができる。ステップ１５０８で、キー抽出器２３５（図２）は、データストリーム内のイベントメッセージに基づいてイベント／鍵のペアを生成することができる。ステップ１５１０で、イベント／キーのペアは、状態変数などの変数を提供または更新し、それらをデータベース１８０に格納することができるアキュムレータ３４８（図３）によって処理され得る。いくつかの実施形態では、キー抽出器２３５は、イベントを特定のアキュムレータ３４８のインスタンスにディスパッチすることによって、アキュムレータ３４８と密接に動作することができる。リアルタイムデータストリームの処理速度を最大化するために、キー抽出器２３５は、アキュムレータのインスタンスおよびそれらのそれぞれのサーバー／ＪＶＭ／スレッドをマッピングすることができる。キー抽出器２３５は、待ち時間を最小化し、応答時間を改善するために、どのアキュムレータ３４８のインスタンスにイベントを送信するかを決定することができる。
【０１９９】
次に、アキュムレータ３４８による変数は、データストリームの異常の決定を行うときに、不正行為／リスク検出サービス３４４によって使用され得る。例えば、ステップ１５１２で、クライアントシステム１９０は、ＨＴＴＰ要求を送信することができる（例えば、支払いクライアントシステム１９０Ａは、要求支払いをサービスシステム１０５に送信することができる）。要求は、不正行為／リスク検出サービス３４４によって受信することができ、サービス３４４は、次に、ステップ１５１４で、データベース１８０からのＨＴＴＰ要求に関連する変数を要求することができる。ステップ１５１６で、データベース１８０は、変数を不正行為／リスク検出サービス３４４に返すことができ、不正行為／リスク検出サービス３４４は、ＨＴＴＰ要求を受け入れるべきかどうかを決定するための予測モデルおよび／または規則を実装することができる。ステップ１５１８で、ステップ１５１６の変数に基づいて、不正行為／リスク検出サービス３４４がＨＴＴＰ応答を送信することができる。
【０２００】
ここで図１６を参照すると、開示された実施形態と一致する、トランザクションイベントに基づく状態変数の更新を示すプロセスフロー図が示されている。いくつかの実施形態では、図１６に示すように、システム１００（図１）の異なる要素は、フロー１６００の特定のステップを実行することができる。例えば、サービスシステム１０５の構成要素は、１つまたは複数のステップを実行することができるが、クライアントシステム１９０などの他のシステムは、他のステップを実行することができる。しかし、他の実施形態では、システム１００の代替要素は、説明されたステップを実行することができ、またはシステム１００の単一の要素は、説明されたステップの１つまたは複数を実行することができる。
【０２０１】
ステップ１６０２で、クライアントシステム１９０は、トランザクションイベントを含むイベントメッセージを送信することができる。例えば、支払いクライアントシステム１９０Ａは、顧客ＩＤ、ＩＰアドレス、クレジットカード番号、小売業者ＩＤ、および金額を含むトランザクションイベントを送信することができる。ステップ１６０４で、キー抽出器２３５（図２）は、トランザクションイベントのためのイベント／キーのペアを有するデータストリームを生成することができる。キー／ペアイベントに基づいて、アキュムレータ３４８は、ステップ１６０２のトランザクションイベントに基づいて変数を更新することができる。例えば、ステップ１６０６で、アキュムレータ３４８は、トランザクションイベント／キーのペアに基づいて、トランザクションの量または数を追跡する状態変数を更新することができる。アキュムレータ３４８はまた、更新された状態変数をデータベース１８０に格納することができる。
【０２０２】
ここで図１７を参照すると、開示された実施形態と一致する、トランザクションイベントに基づく状態変数の更新を示すプロセスフロー図が示されている。いくつかの実施形態では、図１７に示すように、システム１００（図１）の異なる要素は、フロー１７００の特定のステップを実行することができる。例えば、サービスシステム１０５の構成要素は、１つまたは複数のステップを実行することができるが、クライアントシステム１９０などの他のシステムは、他のステップを実行することができる。しかし、他の実施形態では、システム１００の代替要素は、説明されたステップを実行することができ、またはシステム１００の単一の要素は、説明されたステップの１つまたは複数を実行することができる。
【０２０３】
ステップ１７０２で、クライアントシステム１９０は、注文イベントを含むイベントメッセージを送信することができる。例えば、注文クライアントシステム１９０Ｄは、注文イベント、および／または注文キャンセルイベントを送信することができる。注文イベントは、顧客ＩＤ、ＩＰアドレス、アイテム識別、クライアント情報、および金額が含むことができる。ステップ１７０４で、キー抽出器２３５は、注文イベントのためのイベント／キーのペアを有するデータストリームを生成することができる。キー／ペアイベントに基づいて、アキュムレータ３４８（図３）は、ステップ１７０２の注文イベントに基づいて変数を更新することができる。例えば、ステップ１７０６で、アキュムレータ３４８は、注文イベント／キーのペアに基づいて、トランザクションの量または数を追跡する状態変数を更新することができる。アキュムレータ３４８はまた、更新された状態変数をデータベース１８０に格納することができる。
【０２０４】
いくつかの実施形態では、フロー１６００および１７００は、並行して実行することができ、トランザクションおよび注文イベントの両方に関連する状態変数を同時に更新することができる。
【０２０５】
ここで図１８を参照すると、開示された実施形態と一致する、アラート処理フローを示すプロセスフロー図が示されている。いくつかの実施形態では、図１８に示すように、システム１００（図１）の異なる要素は、フロー１８００の特定のステップを実行することができる。例えば、サービスシステム１０５の構成要素は、１つまたは複数のステップを実行することができるが、クライアントシステム１９０などの他のシステムは、他のステップを実行することができる。しかし、他の実施形態では、システム１００の代替要素は、説明されたステップを実行することができ、またはシステム１００の単一の要素は、説明されたステップの１つまたは複数を実行することができる。
【０２０６】
ステップ１８０２で、クライアントシステム１９０は、ＨＴＴＰ要求をサービスシステム１０５に送信することができる。例えば、支払いクライアントシステム１９０Ａは、トランザクションのＨＴＴＰ要求をサービスシステム１０５に送信することができる。ＨＴＴＰ要求は、ＲＥＳＴ  ＡＰＩなどのＡＰＩを使用して送信され得る。ステップ１８０４で、不正行為／リスク検出サービス３４４は、ルックアップコマンドを使用してデータベース１８０から変数を要求することができる。例えば、図１６〜図１７に関連して前述したように、アキュムレータ３４８は、状態変数を計算し、データベース１８０に格納することができる。ステップ１８０４で、不正行為／リスク検出サービス３４４は、データベース１８０から変数を要求することができ、データベース１８０は、ステップ１８０６におけるＨＴＴＰ要求に関連する変数を返すことができる。
【０２０７】
不正行為／リスク検出サービス３４４は、図１２〜図１３に関連してさらに説明するように、モデルおよび／または予測規則を使用して、ステップ１８０６で受信された変数に基づいて応答を決定することができる。ステップ１８０８で、不正行為／リスク検出サービス３４４は、応答をクライアントシステム１９０に送信することができる。応答は、不正行為／リスク検出サービス３４４に格納された状態変数、モデルおよび規則、ならびにＨＴＴＰ要求で提供された情報に基づくことができる。
【０２０８】
本開示の別の態様は、実行されると、１つまたは複数のプロセッサに上記のように方法を実行させる命令を格納する非一時的なコンピュータ可読媒体に向けられている。コンピュータ可読媒体は、揮発性もしくは不揮発性、磁気、半導体、テープ、光学、取り外し可能、取り外し不可能、または他のタイプのコンピュータ可読媒体もしくはコンピュータ可読記憶装置を含むことができる。例えば、コンピュータ可読媒体は、開示されるように、コンピュータ命令が格納されている記憶ユニットまたはメモリモジュールであってもよい。いくつかの実施形態では、コンピュータ可読媒体は、コンピュータ命令が格納されたディスクまたはフラッシュドライブであってもよい。
【０２０９】
開示されたシステムおよび関連する方法に対して様々な修正および変形を行うことができることは当業者には明らかであろう。他の実施形態は、開示されたシステムおよび関連する方法の明細書および実施を考慮することから、当業者には明らかであろう。明細書および実施例は例示としてのみみなされることが意図されており、真の範囲は以下の特許請求の範囲およびそれらの同等物によって示されている。
【０２１０】
さらに、例示的な実施形態が本明細書で説明されてきたが、本開示に基づいて当業者によって理解されるように、同等の要素、修正、省略、（例えば、様々な実施形態にわたる態様の）組み合わせ、適応、および／または変更を有する任意のおよびすべての実施形態の範囲が可能である。例えば、例示的なシステムに示す構成要素の数および向きは変更されてもよい。さらに、添付の図面に示されている例示的な方法に関して、ステップの順序およびシーケンスを変更することができ、ステップを追加または削除することができる。さらに、コンピュータ化された方法の例示的な実施形態のいくつかは、例示的なスクリプトおよびルーチンを説明するためにＪａｖａ言語を使用して説明されたが、開示された方法およびシステムは、代替言語を使用して実装されてもよい。開示された実施形態は、Ｊａｖａに加えて、１つまたは複数のプログラミング言語を使用することができる。例えば、開示された実施形態はまた、Ｐｙｔｈｏｎ、Ｃ、Ｃ＋＋、Ｃ＃、Ｒ、Ｇｏ、Ｓｗｉｆｔ、Ｒｕｂｙ、および／またはそれらの組み合わせを使用して実装され得る。
【０２１１】
したがって、前述の説明は、例示だけの目的で提示されている。これは、網羅的ではなく、開示された正確な形態または実施形態に限定されない。当業者には、開示された実施形態の明細書および実施を考慮することによって、修正および適合が明らかになろう。
【０２１２】
特許請求の範囲は、特許請求の範囲で使用される文言に基づいて広く解釈されるべきであり、本明細書に記載された例に限定されず、これらの例は非排他的であると解釈されるべきである。さらに、開示された方法のステップは、ステップを並べ替えること、および／またはステップを挿入または削除することを含む、任意の方法で修正されてもよい。
【図１】
2021530798.tif 000003
【図２】
2021530798.tif 000004
【図３】
2021530798.tif 000005
【図４】
2021530798.tif 000006
【図５】
2021530798.tif 000007
【図６】
2021530798.tif 000008
【図７】
2021530798.tif 000009
【図８】
2021530798.tif 000010
【図９】
2021530798.tif 000011
【図１０】
2021530798.tif 000012
【図１１】
2021530798.tif 000013
【図１２】
2021530798.tif 000014
【図１３】
2021530798.tif 000015
【図１４Ａ】
2021530798.tif 000016
【図１４Ｂ】
2021530798.tif 000017
【図１４Ｃ】
2021530798.tif 000018
【図１５】
2021530798.tif 000019
【図１６】
2021530798.tif 000020
【図１７】
2021530798.tif 000021
【図１８】
2021530798.tif 000022
【国際調査報告】
2021530798.tif 000023
2021530798.tif 000024