本発明における情報処理装置100を、図1に示す情報処理システム1に適用した例を用いて説明する。情報処理システム1では、図1に示すように、情報処理装置100A〜100C(情報処理装置100A〜100Cを単に情報処理装置100ともいう)、顧客A〜Dの端末100Dのそれぞれがネットワーク210を介して通信可能に接続されている。なお、顧客A〜Dの端末100Dは、それぞれ単体で情報処理装置100としても機能することが可能であるが、理解を容易にするため、この実施の形態では、これらを情報処理装置100と区別して説明する。
情報処理装置100は、携帯電話やスマートフォン、タブレットやPC(Personal Computer)等の情報端末(所謂コンピュータ)であり、P2P(Peer to Peer)等の分散型のネットワーク210を構築している。なお、情報処理システム1は、P2P型のシステムに限られず、例えばクラウドコンピューティング型であってもよい。
情報処理装置100は、例えば、顧客Cが店舗2に入店した、などといった、顧客と店舗等(店舗や移動手段など)との間で発生した事象を示すデータ(トランザクションデータ)をネットワーク210から受信したことに基づいて、新たなデータブロックを生成して当該受信データを格納し、既存のハッシュチェーンに連結する、ハッシュチェーン登録装置として機能する。この実施の形態では、当該トランザクションの発生は、顧客が所有するクーポンを入店時に使用したことや、会計を行ったこと等により行われることとしている。具体的には、顧客の端末100Dに表示されたクーポンを店舗側が読み取ることにより当該顧客が当該店舗に入店したというトランザクションデータが新たなデータブロックに登録され、会計を行ったタイミングにおいて、退店したというトランザクションデータが新たなデータブロックに登録されればよい。なお、移動手段についても同様に、乗車時と会計時とで利用開始と終了を示すトランザクションデータがそれぞれ登録されればよい。
なお、上述したように、顧客A〜Dの端末100Dが情報処理装置100として機能することもあることから、情報処理装置100は、トランザクションデータを生成し、ネットワーク210へ配信する機能を有するトランザクション生成装置として機能することもある。ハッシュチェーン登録装置にて登録された内容は、ネットワーク210を介して、各情報処理装置100で共有される。また、通常、一定数のトランザクションデータが一つのデータブロックに格納される(一定数のトランザクションデータをひとまとめにして一つのブロックに格納する)が、この実施の形態では、理解を容易にするため、一つのトランザクションデータが一つのデータブロックに格納されるものとする。
この実施の形態において、顧客と店舗等(店舗や移動手段など)との間で発生した事象により生成された(端末100Dがトランザクション生成装置として機能して生成された)トランザクションデータは、データブロックと呼ばれる一つの単位に格納され、当該データブロックを時系列に連結したそれぞれの種別のハッシュチェーンによって管理される。例えば、顧客Cが店舗2に入店した、といった事象のトランザクションデータは、顧客Cの種別のハッシュチェーンおよび店舗2の種別のハッシュチェーンとに、それぞれ新たなデータブロックとして同内容のデータが登録されて管理される。
また、この実施の形態における情報処理装置100は、各種別のハッシュチェーンに含まれるデータブロックから、ユーザにより指定された登録データを対象として、対象となる顧客に対し、おすすめの店舗等を提示するレコメンド装置としても機能する。
この実施の形態における情報処理装置100のレコメンド装置としての機能は、詳しくは後述するが、複数登録されたデータブロックから、対象となるトランザクションデータを抽出して所定の演算を行うとともに、有向二部グラフを生成してレコメンド値を算出することで、対象となる顧客に対し、おすすめの店舗等を提示する。なお、レコメンド値をそのまま用いておすすめの店舗を顧客に提示すると、満席の店舗を提示してしまうことがある(移動手段についても同様)。そのため、この実施の形態ではこのようなことを防止して、より適格な店舗を提示できるよう、店舗側のリアルタイムの空席状況を判定し、レコメンド値と判定結果に基づいて、おすすめの店舗を提示する。
次に、図2を参照し、この実施の形態における情報処理装置100の構成について説明する。なお、図示する例では、情報処理装置100Aを例としているが、情報処理装置100Bおよび100C、端末100Dが情報処理装置100として機能する場合についても同様であるため、説明は省略する。なお、図示は省略しているが、トランザクション生成装置としての機能を有する機能部が設けられていてもよい。
図2に示すように、情報処理装置100A(以下、情報処理装置100)は、記憶部110と、制御部120と、入出力部130と、通信部140と、これらを相互に接続するシステムバス(図示省略)と、を備えている。
記憶部110は、ROM(Read Only Memory)やRAM(Random Access Memory)等を備える。ROMは制御部120のCPU(Central Processing Unit)が実行するプログラム及び、プログラムを実行する上で予め必要なデータを記憶する(図示省略)。具体的に、この実施の形態では、当該情報処理装置100を、ハッシュチェーン登録装置およびレコメンド装置として機能させるためのプログラムが、予めインストールされている。RAMは、プログラム実行中に作成されたり変更されたりするデータを記憶する。記憶部110は、制御部120が実行するプログラムが用いる主要な情報として、各種別のハッシュチェーン111を記憶する。
各種別のハッシュチェーン111は、例えば、顧客A〜D、店舗1〜3、移動手段1といった、それぞれの種別に対応するハッシュチェーンであり、それぞれのハッシュチェーンは、トランザクションデータが格納されたデータブロックが連結されたものである。各種別のハッシュチェーン111は、後述するデータブロック登録処理にて当該記憶部110に記憶され、後述するグラフ生成処理やレコメンド処理により参照される。
制御部120は、CPUやASIC(Application Specific Integrated Circuit)等から構成される。制御部120は、記憶部110に記憶されたプログラムに従って動作し、当該プログラムに従った処理を実行する。制御部120は、記憶部110に記憶されたプログラムにより提供される主要な機能部として、初期登録部121と、同期処理部122と、データブロック登録部123と、データ取得部124と、グラフ生成部125と、レコメンド処理部126と、を備える。
初期登録部121は、ユーザの入出力部130に対する操作や、通信部140を介して受信した要求に基づいて、新たな種別のハッシュチェーンを生成するために必要な初期情報を登録する機能を実現する機能部である。詳しくは後述するが、初期登録部121は、例えば、顧客Cの種別のハッシュチェーンを生成するために必要な初期情報として、顧客Cのアドレス、インデックス値などを登録する機能(すなわち、後述するハッシュチェーンの土台情報を登録する機能)を有している。
同期処理部122は、当該情報処理装置100に記憶された各種別のハッシュチェーンと、他の情報処理装置100に記憶された各種別のハッシュチェーンとを同期する機能を実現する機能部である。詳しくは後述するが、同期処理部122は、後述するデータブロック登録処理にてトランザクションデータを当該情報処理装置100におけるデータブロックに登録する前と後に、他の情報処理装置100と同期する機能を有している。また、同期処理部122は、後述する初期登録処理において他の情報処理装置100へ、ハッシュチェーンの土台情報を同期させる機能を有している。
データブロック登録部123は、発生したトランザクションのトランザクションデータを含むデータブロックを、当該情報処理装置100の各種別のハッシュチェーン111のうち、対応する種別のハッシュチェーンに追加する機能を実現する機能部である。詳しくは後述するが、データブロック登録部123は、例えば、顧客Cが店舗2を訪れた場合、顧客Cと店舗2のそれぞれの種別のハッシュチェーンに、当該内容(トランザクションデータ)を、新たなデータブロックとして登録する機能を有している。
データ取得部124は、ユーザの指定に基づいて、登録された各種別のハッシュチェーン111に含まれるデータブロックに含まれるトランザクションデータを取得する機能を実現する機能部である。
グラフ生成部125は、データ取得部124により取得したトランザクションデータに基づいて有向二部グラフを生成する機能を実現する機能部である。
レコメンド処理部126は、グラフ生成部125により生成された有向二部グラフを編成し、レコメンド対象者に対しおすすめの店舗等を提示する機能を実現する機能部である。
これら各機能部が協働して、当該情報処理装置100をハッシュチェーン登録装置およびレコメンド装置として機能させる。
入出力部130は、キーボード、マウス、カメラ、マイク、液晶ディスプレイ、有機EL(Electro−Luminescence)ディスプレイ等から構成され、データの入出力を行うための装置である。
通信部140は、他の情報処理装置100や顧客A〜Dの端末100とネットワーク210を介して通信を行うためのデバイスである。
以上が、情報処理装置100の構成である。続いて情報処理装置100の動作などについて、図3〜図19を参照して説明する。まず、ハッシュチェーン登録装置として機能した場合における情報処理装置100の動作について、図3〜図7を参照して説明する。
まず、ユーザの入出力部130に対する操作(入力操作)や、端末100Dから受信した要求(登録要求)に基づいて、図3に示す初期登録処理が行われる。初期登録処理は、新たな種別のハッシュチェーンを生成するために必要な初期情報を登録する処理である。この例では、理解を容易にするため、顧客Cについての初期登録を行う場合について説明する。初期登録処理を開始すると、情報処理装置100は、初期登録部121の機能により、種別データを生成する(ステップS101)。具体的に、ステップS101では、入力操作や登録要求に含まれる、種別情報である顧客Cの情報および顧客Cのアドレスを、顧客Cの種別のハッシュチェーンを生成するための情報として、記憶部110へ登録する。なお、当該情報は、各種別のハッシュチェーン111のうちの顧客Cの種別のハッシュチェーンとして登録されればよい。また、種別情報は登録せず、アドレスのみ登録するようにしてもよい。なお、この実施の形態では、顧客A〜Dのアドレスをそれぞれ01〜04、店舗1〜3のアドレスをX1〜X3、移動手段1のアドレスをX4としている。
次に、情報処理装置100は、初期登録部121の機能により、登録した顧客Cの種別のハッシュチェーンのインデックス値に、初期値である「0」を登録する(ステップS102)。インデックス値が「0」であることは、当該ハッシュチェーンが初期状態であること(何らデータブロックが登録されていない状態であること)を示している。すなわち、ステップS101およびステップS102の処理では、データブロックがチェーンで連結されてはいないものの、データブロックが未登録のハッシュチェーン(ハッシュチェーンの土台情報)が生成されていると言える。なお、この状態では、データブロックがチェーンで連結されていないため、データを削除でき、また、削除したことを検証することができない、といった問題がある。そこで、対改ざん性を高めるため、ランダムで選択したハッシュチェーンに対して特別なトランザクションを発生させ、インデックス値が「0」のデータブロックをチェーンで連結する処理を行うようにしてもよい。
ステップS102の処理を実行した後、情報処理装置100は、同期処理部122の機能により、他の情報処理装置100へ、当該内容を登録し(ステップS103)、初期登録処理を終了する。具体的に、ステップS103では、当該情報処理装置100における顧客Cの種別のハッシュチェーン(ハッシュチェーンの土台情報)の内容を、他の情報処理装置100の記憶部110における各種別のハッシュチェーン111へコピーする。これにより、全ての情報処理装置100において顧客Cの種別のハッシュチェーン(ハッシュチェーンの土台情報)が共有されることとなる。
次に、発生したトランザクションについて、当該トランザクションデータを対応する種別のハッシュチェーンのデータブロックへ登録するデータブロック登録処理について説明する。当該データブロック登録処理は、発生したトランザクションに対応するトランザクションデータを受信することにより実行される。トランザクションデータは、端末100Dにより受信するものであるが、入出力部130に入力されてもよい。なお、この実施の形態では、上述したように、一つのトランザクションにつき一つのデータブロックが作成され登録されることから、当該データブロック登録処理は、登録すべきトランザクションの数が複数ある場合、繰り返し実行されることとなる。
図4は、データブロック登録処理の一例を示すフローチャートである。この例では、理解を容易にするため、顧客Cが店舗2に入店したというトランザクションが発生した場合のデータブロック登録処理(図5(A)の状態から(B)の状態へと移行する場合)について説明する。
顧客Cが店舗2に入店したというトランザクションが発生すると、これに対応するトランザクションデータが顧客Cの端末100Dから送信される。これにより、情報処理装置100は、データブロック登録部123の機能により、データブロック登録処理を開始する。なお、例えば、顧客Cの端末100Dと、店舗2の端末の両方から同内容のトランザクションデータを受信することをもってデータブロック登録処理を開始するようにしてもよい。この場合、異なる内容のトランザクションデータを受信した場合には、エラーを出力するようにしてもよい。
データブロック登録処理を開始すると、情報処理装置100は、まず、同期処理部122の機能により、当該情報処理装置100における対象のハッシュチェーンと、他の情報処理装置100における対象のハッシュチェーンとが、同期しているか否かを判定する(ステップS201)。具体的に、この例におけるステップS201の処理では、各種別のハッシュチェーン111のうち、顧客Cの種別のハッシュチェーンに含まれる最新のデータブロックのインデックス値とハッシュ値、および店舗2の種別のハッシュチェーンに含まれる最新のデータブロックのインデックス値とハッシュ値とが、他の全ての情報処理装置100に記憶されたものと同一であるか否かを判定することで、同期しているか否かを判定する。
図5(A)に示す例を用いて説明すると、当該情報処理装置100(トランザクションデータを受信した情報処理装置100のことをいう、以下同様)の各種別のハッシュチェーン111のうち、顧客Cのハッシュチェーンには、インデックス値「N−1」のデータブロックが最新のデータブロックとして登録されており、店舗2のハッシュチェーンには、インデックス値「Z−1」のデータブロックが最新のデータブロックとして登録されている。なお、図示するように、この実施の形態におけるハッシュチェーンのデータブロック(第mのデータブロック)には、登録データ(トランザクションデータ)と、現在のハッシュチェーンの末尾(1つ前)のデータブロック(第m−1のデータブロック)のハッシュ値(256ビット)が含まれる点は、従来のブロックチェーンの仕組みと同様である。また、データブロックには、例えば、当該データブロックに登録データが登録された日時を示すタイムスタンプなどの分析用付加データが含まれる(図示省略)点についても、従来のブロックチェーンの仕組みと同様である。
図4のステップS201の処理では、インデックス値「N−1」と当該N−1のハッシュ値、およびインデックス値「Z−1」と当該Z−1のハッシュ値が、他の全ての情報処理装置100に記憶されているものと一致するか否かを判定することで、同期しているか否かを判定する。例えば、インデックス値「N」と当該Nのハッシュ値が記憶されている情報処理装置100が存在する場合には、当該情報処理装置100に記憶されている顧客Cの種別のハッシュチェーンの情報が古いと判定する(インデックス値「Z」および当該Zのハッシュ値の場合には店舗2の種別のハッシュチェーン)。一方、インデックス値「N−2」と当該N−2のハッシュ値が記憶されている情報処理装置100が存在する場合には、その情報処理装置100に記憶されている顧客Cの種別のハッシュチェーンの情報が古いと判定する(インデックス値「Z−2」および当該Z−2のハッシュ値の場合には店舗2の種別のハッシュチェーン)。
同期していない場合(ステップS201;No)、情報処理装置100は、同期処理部122の機能により、最新のハッシュチェーンの内容を、古いと判定したハッシュチェーンが登録されている情報処理装置100へコピーする同期処理を実行する(ステップS202)。なお、ステップS202の処理では、ハッシュチェーン全体をコピーしてもよいし、不足しているデータブロックのみ(インデックス値やハッシュ値も含む)コピーしてもよい。
ステップS201にて同期していると判定した場合(ステップS201;Yes)、またはステップS202の処理を実行した場合、情報処理装置100は、対象のハッシュチェーンに同一の登録データを格納したデータブロックをそれぞれ追加する(ステップS203)。なお、上述したように、新たなデータブロック(第mのデータブロック)をハッシュチェーンに追加する場合、登録データ(トランザクションデータ)と、現在のハッシュチェーンの末尾(1つ前)のデータブロック(第m−1のデータブロック)のハッシュ値(256ビット)をデータブロックに格納し、現在のハッシュチェーンの末尾(1つ前)のデータブロック(第m−1のデータブロック)に連結する点は、従来のブロックチェーンの仕組みと同様である。
具体的に、ステップS203の処理では、図5(B)に示すように、顧客Cの種別のハッシュチェーンには、インデックス値「N」のデータブロックがインデックス値「N−1」のデータブロックに連結されるとともに、店舗2の種別のハッシュチェーンには、インデックス値「Z」のデータブロックがインデックス値「Z−1」のデータブロックに連結される。連結されるそれぞれのデータブロックは、同一のトランザクションデータが含まれる。具体的に、顧客Cが(From:03)店舗2(To:X2)に入店したことを示す内容が登録される(退店した場合についても同様)。図示するように、「From」と「To」により、どの顧客がどの店舗を訪れたかが示される。なお、入店と退店とで同内容のデータブロックが登録されることから、例えば、店舗2の種別のハッシュチェーンに登録されたデータブロックを時系列に確認し、同内容のデータブロックの組以外の数を予め定められた席数から差し引くことで、リアルタイムの空席数を把握することができる。席数は、例えば図3の初期登録時に店舗等の種別のハッシュチェーンにおけるインデックス値「0」のデータブロックに登録されていればよい。また、この他にも、顧客が店舗にて商品を購入したことを示す場合には、価値の大きさを、例えばコインの移動量を示すデータをさらに登録することで示してもよい。なお、顧客Cの種別のハッシュチェーンにおけるインデックス値「N」のデータブロックには、N−1のハッシュ値が格納され、店舗2の種別のハッシュチェーンにおけるインデックス値「Z」のデータブロックには、Z−1のハッシュ値が格納される。このように、この実施の形態における情報処理装置100は、対応するそれぞれのハッシュチェーンに、同一のトランザクションデータを追加する。
図4に戻り、ステップS203の処理を実行した後、情報処理装置100は、同期処理部122の機能により、ステップS203にてデータブロックを追加した種別のハッシュチェーンを他の情報処理装置100へ登録することにより、当該情報処理装置100と他の情報処理装置100とを同期してから(ステップS204)、データブロック登録処理を終了する。なお、ステップS204の処理では、当該情報処理装置100における顧客Cおよび店舗2の種別のハッシュチェーンそれぞれの内容を、他の情報処理装置100の記憶部110における各種別のハッシュチェーン111へコピーする。なお、ステップS205の処理では、ステップS202の処理と同様に、ハッシュチェーン全体をコピーしてもよいし、不足しているデータブロックのみ(インデックス値やハッシュ値も含む)コピーしてもよい。
このように、トランザクションが発生する度に、図4に示すデータブロック登録処理が行われ、トランザクションデータが対象のハッシュチェーンに登録されることとなる。例えば、図6に示すように、所定の日に13個のトランザクションが発生した場合には、図4に示すデータブロック登録処理が13回行われ、対象となる種別のハッシュチェーンにそれぞれのトランザクションデータが登録されることとなる。図7は、図6に示す13個のトランザクションについて図4に示すデータブロック登録処理が13回行われた場合におけるそれぞれのハッシュチェーンの登録内容を示している。なお、図7に示す例では、理解を容易にするため、各データブロックに格納されているハッシュ値や分析用付加データについては省略している。
具体的に、図6の1つ目のトランザクションに対応する顧客Aが店舗1に入店したというトランザクションデータは、図4に示すデータブロック登録処理が行われることにより、図7に示す顧客Aの種別のハッシュチェーンにおけるデータブロック(1)および店舗1の種別のハッシュチェーンにおけるデータブロック(1)に登録される。図6の2つ目のトランザクションに対応する顧客Bが店舗2に入店したというトランザクションデータは、図4に示すデータブロック登録処理が再度行われることにより、図7に示す顧客Bの種別のハッシュチェーンにおけるデータブロック(1)および店舗2の種別のハッシュチェーンにおけるデータブロック(1)に登録される。そして、図6の3つ目のトランザクションに対応する顧客Aが店舗1を退店したというトランザクションデータは、図4に示すデータブロック登録処理が再度行われることにより、図7に示す顧客Aの種別のハッシュチェーンにおけるデータブロック(2)および店舗1の種別のハッシュチェーンにおけるデータブロック(2)に登録される。このように、トランザクションの数に対応した回数のデータブロック登録処理が行われることにより、それぞれのトランザクションデータが対応する種別のハッシュチェーンに連結する(図6の4つ目以降のトランザクションについても同様)。なお、図7に示す例では、簡略化のため、移動手段について、利用終了を示すトランザクションデータの登録を省略している。
以上がハッシュチェーン登録装置として機能した場合における情報処理装置100の動作である。続いてレコメンド装置として機能した場合における情報処理装置100の動作について、図8〜図19を参照して説明する。なお、理解を容易にするため、以下の例では、図4に示すデータブロック登録処理が複数回行われ、図8に示すように各ハッシュチェーンのデータブロックが登録されているものとする。また、その後に顧客Dが店舗2に入店し、その内容が顧客Dの種別のハッシュチェーンおよび店舗2の種別のハッシュチェーンにそれぞれ登録されるものとして、以下説明する。なお、図8に示す例では、理解を容易にするため、店舗の入店と退店および移動手段の利用開始と利用終了をそれぞれ一組として示しており、また、店舗の種別のハッシュチェーンについては省略しているが、具体的な登録構成については図7に示したように、入店と退店(利用開始と利用終了についても同様)とでそれぞれ1つのデータブロックが登録され、各顧客の種別のハッシュチェーンと同内容のデータブロックが、対応する店舗等の種別のハッシュチェーンにも登録されている。また、この実施の形態では、入店と退店の組のトランザクションデータ1つにつき、当該店舗を1回訪問したとカウントし、利用開始と利用終了の組のトランザクションデータ1つにつき、当該移動手段を1回利用したとカウントするものとする。また、この例では、顧客Dが店舗2に入店した後、当該顧客Dをレコメンド対象者として、当該顧客Dに対して次の入店先をレコメンドする場合について説明する。
図9は、グラフ生成処理の一例を示すフローチャートである。当該グラフ生成処理は、ユーザの入出力部130に対する操作(入力操作)に基づいて開始される。なお、端末100Dからの要求を受信することにより開始されてもよい。当該グラフ生成処理は、各種別のハッシュチェーン111からユーザに所望された期間のトランザクションデータを取得し、有向二部グラフを生成するための処理である。有向二部グラフの詳細については後述する。なお、この実施の形態では、図4に示すデータブロック登録処理により、図8に示す登録内容のハッシュチェーンが生成されており、図8に示す「XX年○月○日」〜「XX年○月□日」を対象とした有向二部グラフを生成する場合を例に説明する。
図9に示すグラフ生成処理を開始すると、情報処理装置100は、データ取得部124の機能により、まず、グラフ生成の対象が指定されているか否かを判定する(ステップS301)。具体的に、ステップS301では、ユーザの入力操作により対象の期間(開始時間と終了時間)が指定されているか否かを判定する。上述したように、この例では図8に示す「XX年○月○日」〜「XX年○月□日」が対象として指定されたものとする。
ステップS301にて対象の期間が指定されていると判定した場合(ステップS301;Yes)、情報処理装置100は、データ取得部124の機能により、指定された期間に対応するデータブロックのトランザクションデータ(対象データ)を取得する(ステップS302)。ステップS302では、ユーザの入力操作により指定された期間に対応するデータブロックを、分析用付加データに含まれるタイムスタンプに基づいて特定し、当該データブロックに登録されたトランザクションデータ(対象データ)を取得する。この例では、ステップS302において、顧客A〜顧客Cの種別のハッシュチェーンに登録されたデータブロック、店舗1〜3および移動手段1の種別のハッシュチェーンに登録されたデータブロックのうち、図8に示す「XX年○月○日」〜「XX年○月□日」の期間におけるそれぞれのデータブロックに登録されたトランザクションデータ(対象データ)を抽出する。
一方、ステップS301にて対象の期間が指定されていないと判定した場合(ステップS301;No)、情報処理装置100は、データ取得部124の機能により、全てのデータブロックのトランザクションデータ(対象データ)を取得する(ステップS303)。
ステップS302またはステップS303の処理を実行した後、情報処理装置100は、グラフ生成部125の機能により、トランザクションデータの内容に基づいて、種別毎に重みを算出する(ステップS304)。具体的に、ステップS304の処理では、図10(A)に示すように、顧客Cが店舗2を3回訪問しており、店舗3を1回訪問しており、移動手段1を1回利用しているといったように合計で5回訪問(利用)しているような場合、ステップS304では、図10(B)に示すように、各店舗への訪問回数および移動手段の利用回数を合計値で除算して重みを算出する。顧客Cは、店舗2を3回訪問し、店舗3を1回訪問しており、移動手段1を1回利用していることから、図10(B)に示すように、それぞれの重みは、0.60と0.20と0.20となる。ステップS304では、この処理を全ての顧客について行うとともに、店舗や移動手段側についても同様の処理を行う。例えば、店舗1については、顧客Aのみが2回訪問していることから、店舗1から顧客Aに対する重みは1.00となる(図11参照)。店舗2については、顧客Bが2回、顧客Cが3回訪問しているため、店舗2から顧客Bに対する重みが0.40、顧客Cに対する重みが0.60となる(図11参照)。
図9に戻り、ステップS304の処理にて全ての種別について重みを算出した後、情報処理装置100は、グラフ生成部125の機能により、それぞれの種別のうち、起点(From)と終点(To)により示される取引対象(顧客や店舗および移動手段)をそれぞれ頂点とし、それぞれの頂点を辺で結んだ有向二部グラフを生成し(ステップS305)、グラフ生成処理を終了する。具体的に、ステップS305の処理では、それぞれの顧客を起点とし、それぞれの店舗および移動手段(店舗等)を終点とした頂点同士を、訪問有無に応じて辺で結び、図11に示すような有向二部グラフを生成する。なお、図示する例では、理解を容易にするため、顧客側から店舗等方向への矢印のみにて辺を表し、かつ、図9のステップS304にて算出した重みを、顧客側と店舗等側のそれぞれで記載しているが、実際には、辺(矢印)の太さにより片側方向(顧客から店舗等方向)の重みを表す(辺が太いほど重みが大きい)。この場合、店舗等側から顧客側方向への辺(矢印)の太さにより、店舗等側から(店舗等から顧客方向)の重みを表せばよい。すなわち、ステップS305では、ステップS304にて算出した重みに応じた太さの辺(矢印)で、頂点をそれぞれの方向から結べばよい。
この実施の形態における顧客Aは、店舗1と店舗3を訪れており、移動手段1を利用していることから(図8参照)、図11に示すように、顧客Aの頂点は、店舗1と店舗3および移動手段1の頂点と結ばれる。顧客Bは、店舗2と店舗3を訪れているため(図8参照)、図11に示すように、顧客Bの頂点は、店舗2と店舗3の頂点と結ばれる。顧客Cは、店舗2と店舗3を訪れており、移動手段1を利用していることから(図8参照)、図11に示すように、顧客Cの頂点は、店舗2と店舗3および移動手段1の頂点と結ばれる。なお、当該有向二部グラフには、図11に示すように、訪問回数に応じて図9のステップS304で算出された重みが含まれる(顧客側からの辺(矢印)の太さや、店舗等側からの辺(矢印)の太さによりそれぞれの方向からの重みが表される)。
このように、グラフ生成処理が実行されることにより、図11に示す有向二部グラフが生成されることとなる。このような状態において、顧客Dが店舗2に入店したといったトランザクションが発生すると、図4のデータブロック登録処理により、当該内容が、顧客Dの種別のハッシュチェーンおよび店舗2の種別のハッシュチェーンにそれぞれ登録される(図示省略)。このような状況において、顧客Dに対しておすすめの店舗等を提示する場合(顧客Dを推薦対象者(レコメンド対象とも言う)としておすすめの店舗等を推薦する場合)におけるレコメンド処理について、以下説明する。なお、通常は、様々なトランザクションが発生するため、図11に示す有向二部グラフについても、これに合わせてリアルタイムで更新されるが、この実施の形態では、理解を容易にするため、顧客Dが店舗2を訪れたという内容のトランザクションのみ発生し、その他のトランザクションについては発生しないものとして以下説明する。
図12は、レコメンド処理の一例を示すフローチャートである。当該レコメンド処理は、端末100Dにより実行指示を受信することで実行されるものであるが、ユーザの入出力部130に対する操作(入力操作)に基づいて開始されてもよい。また、会計処理が行われることで実行されてもよい。
図12に示すレコメンド処理を開始すると、情報処理装置100は、レコメンド処理部126の機能により、指定されたデータブロック(対象ブロック)のトランザクションデータを取得する(ステップS401)。この例では、顧客Dが店舗2に入店したというトランザクションデータが対象であることから、顧客Dの種別のハッシュチェーンと店舗2の種別のハッシュチェーンから当該内容のトランザクションデータを取得する。なお、対象のトランザクションデータの取得については、例えば、FromとToの内容と期間とを指定して行えばよい。
ステップS401の処理を実行した後、情報処理装置100は、レコメンド処理部126の機能により、図9のグラフ生成処理にて生成した有向二部グラフを編成する(ステップS402)。この例では、顧客Dが店舗2を訪れたというトランザクションが追加されたことから、図11に示す有向二部グラフに、当該新たなトランザクションデータに対応する有向二部グラフが加算される。具体的に、この例におけるステップS402では、図15に示すように、顧客Dの頂点を店舗2と結ぶ処理が行われる。なお、この例では、新たな顧客Dが店舗2を訪れたというトランザクションであったため、新たな辺(矢印)で結ぶ例を示したが、例えば、既存の顧客が既に訪問した店舗を再度訪問した(移動手段を再度利用した)ような場合、すなわち訪問回数が増加した場合については、辺(矢印)の太さを、重みに応じて太い態様へと編成すればよい。
また、この例では、顧客Dが店舗2を訪れたというトランザクションが追加された場合について示していることから、新たなトランザクションデータに対応する有向二部グラフが図11に示す有向二部グラフに加算される例を示したが、過去のトランザクションデータに対応する有向二部グラフを減算するようにしてもよい。例えば、顧客Aが店舗1を訪れたというトランザクションを削除する場合には、顧客Aが店舗1への訪問回数が1減少するため(2回から1回となる)、図11における顧客Aから店舗1への辺(矢印)の太さを、重みに応じて細い態様へと編成すればよい(なお、店舗1から顧客Aへの辺(矢印)については、当該店舗1には顧客Aのみが訪問していることから重みが変更されないため、編成しなくてよい)。また、顧客Aが移動手段1を利用したというトランザクションを削除する場合には、顧客Aの移動手段1の利用回数が0回となるため、図11における顧客Aから移動手段1への辺(矢印)を削除する編成を行うとともに、移動手段1から顧客Aへの辺(矢印)を合わせて削除する編成を行えばよい。
図12のステップS402の処理を実行した後、情報処理装置100は、レコメンド処理部126の機能により、レコメンド値を算出するレコメンド値算出処理を実行する(ステップS403)。具体的に、ステップS403では、レコメンド対象の顧客が訪問した店舗等のスコア(値1)を算出し、当該店舗等を訪問(または利用)した顧客のスコア(値2)を、値1に基づいて算出し、当該顧客が訪問した店舗のスコアをレコメンド値として、値2に基づいて算出する。換言すると、レコメンド対象者と似た行動を行っている顧客のスコアを算出し、当該スコアとその顧客の行動(訪れた店舗や利用した移動手段)から、レコメンド対象の顧客に対する行動(店舗や移動手段)のレコメンド値を算出する。以下、顧客Dが店舗2を訪れた場合における、図12のステップS403におけるレコメンド値算出処理について、図13、図15および図16を用いて説明する。
図13は、図12のステップS403の処理において実行されるレコメンド値算出処理の一例を示すフローチャートである。図13に示すレコメンド値算出処理において、情報処理装置100は、まず、レコメンド対象の顧客(推薦対象者)に初期値である1.00の値を与え、当該レコメンド対象者と結ばれた頂点(すなわち、推薦対象者に関連する取引対象)について、順方向(顧客から店舗等方向)の重みを乗じて値1を算出する(ステップS501)。具体的に、ステップS501では、図15に示すように、レコメンド対象である顧客Dに1.00の値を与える。そして、顧客Dに結ばれている辺は店舗2のみであることから、重みの1.00を乗じて、顧客Dから見た店舗2の値を1.00と算出する(図15に示す店舗2の値1)。図13のステップS501の処理を実行した後、情報処理装置100は、値1を持つ頂点に結ばれた頂点(すなわち、値1の取引対象に関連する取引対象)について、逆方向(店舗等から顧客方向)の重みを乗じて値2を算出する(ステップS502)。具体的に、ステップS502では、店舗2側からの重みは、顧客Bへの重みが0.40、顧客Cへの重みが0.60であることから、店舗2から見た顧客Bの値を、値1の1.00に重みの0.40を乗じて0.40(図15に示す顧客Bの値2)と算出し、顧客Cの値を、値1の1.00に重みの0.60を乗じて0.60と算出する(図15に示す顧客Cの値2)。
図13のステップS502の処理を実行した後、情報処理装置100は、値2を持つ頂点と結ばれた頂点(すなわち、値2の取引対象に関連する取引対象)について、順方向(顧客から店舗等方向)の重みを乗じてレコメンド値を算出し(ステップS503)、レコメンド値算出処理を終了する。具体的に、ステップS503では、図16に示すように、値2を持つ頂点である顧客Bと顧客Cのそれぞれの値(図15に示す顧客Bおよび顧客Cの値2)に、顧客側から店舗等側方向の重みを乗じて、それぞれの店舗等のレコメンド値を算出する。より具体的に、情報処理装置100は、レコメンド処理部126の機能により、顧客Bの値2の0.40に店舗2への重み0.40を乗じて0.16を算出する。また、顧客Cから店舗2への辺も存在することから、顧客Cの値2の0.60に店舗2への重み0.60を乗じて0.36を算出する。そして、これらの値を合計して(0.16+0.36)、店舗2のレコメンド値0.52(図16に示す店舗2のレコメンド値)を算出する。また、情報処理装置100は、レコメンド処理部126の機能により、顧客Bの値2の0.40に店舗3への重み0.60を乗じて0.24を算出する。また、顧客Cから店舗3への辺も存在することから、顧客Cの値2の0.60に店舗3への重み0.20を乗じて0.12を算出する。そして、これらの値を合計して(0.24+0.12)、店舗3のレコメンド値0.36(図16に示す店舗3のレコメンド値)を算出する。また、情報処理装置100は、レコメンド処理部126の機能により、顧客Cの値2の0.60に移動手段1への重み0.20を乗じて0.12を算出する。当該移動手段1については顧客Cのみが利用しており、顧客Bは利用していないことから、当該0.12の値をそのまま移動手段1のレコメンド値(図16に示す移動手段1のレコメンド値)とする。
このように、図13に示すレコメンド値算出処理では、レコメンド対象者に1.00の値を与え、当該レコメンド対象者と似た行動を取った者のスコア(値2)から当該レコメンド対象者向けのレコメンド値を算出する。
図12に戻り、ステップS403の処理にてレコメンド値を算出した後、情報処理装置100は、レコメンド処理部126の機能により、ステップS403の処理で算出したレコメンド値に基づいて、レコメンド対象である店舗等を決定するレコメンド対象決定処理を実行し(ステップS404)、レコメンド処理を終了する。
図14は、図12のステップS404の処理において実行されるレコメンド対象決定処理の一例を示すフローチャートである。図14に示すレコメンド対象決定処理において、情報処理装置100は、まず、最も高いレコメンド値の店舗等をレコメンド対象として設定する(ステップS601)。この例では、図16に示すように店舗2のレコメンド値が最も高いことから、ステップS601の処理において店舗2をレコメンド対象として設定する。
続いて情報処理装置100は、ステップS601で設定したレコメンド対象の店舗等が現在入店中(または利用中)の店舗等であるか否かを判定する(ステップS602)。現在入店中の店舗等であるかは、レコメンド対象者の種別のハッシュチェーンのデータブロックに登録された最新のトランザクションデータを確認し、そのToの内容が当該レコメンド対象の店舗等である場合に、ステップS601で設定したレコメンド対象の店舗等が現在入店中(または利用中)の店舗等であると判定すればよい。この例では、上述したように、ステップS601において店舗2がレコメンド対象として設定されており、当該レコメンド対象者である顧客Dは店舗2に入店中であることから、ステップS602の処理において「Yes」と判定されることとなる。
ステップS602においてレコメンド対象は現在入店中の店舗等であると判定した場合(ステップS602;Yes)、情報処理装置100は、次にレコメンド値の高い店舗等をレコメンド対象として設定し(ステップS605)、ステップS602に戻る。この例では、図16に示すように、店舗2のレコメンド値の次に高いレコメンド値である店舗3がレコメンド対象として設定されることとなる。そして、ステップS602において、店舗3は当該レコメンド対象者である顧客Dが入店中の店舗2とは異なるため、「No」と判定され、ステップS603の処理に移行する。
レコメンド対象の店舗等が現在入店中(または利用中)の店舗等でない場合(ステップS602;No)、情報処理装置100は、当該レコメンド対象の店舗等が空いているか否かを判定する(ステップS603)。ステップS603の処理では、レコメンド対象の店舗等の種別のハッシュチェーンのデータブロックから、当該レコメンド処理を行った日付における入店と退店の組(同内容のトランザクションデータが登録されたデータブロックの組)以外のデータブロックの数を、予め定められた席数から差し引いた値が正の数である場合に、レコメンド対象の店舗等に空席有りと判定する。具体的に、図17に示すように、店舗2の席数が予め「5」であると登録されている場合、当該レコメンド処理を行った日付における入店と退店の組(同内容のトランザクションデータが登録されたデータブロックの組)は、データブロック(1)と(3)、データブロック(2)と(4)であり、同内容のトランザクションデータが登録されたデータブロックの組以外のデータブロック(組になっていないデータブロック)は、データブロック(5)の1つである。そのため、図14のステップS603では、店舗2の席数「5」から「1」を減算し、正の数である「4」を得るため、空席有りと判定する。
ステップS603にて空席有りと判定した場合(ステップS603;Yes)、情報処理装置100は、当該レコメンド対象の店舗等(この例では店舗3)を入出力部130に表示することで、レコメンド対象者である顧客Dに対してレコメンドし(ステップS604)、レコメンド対象決定処理を終了する。一方、ステップS603にて空席無しと判定した場合(ステップS603;No)、情報処理装置100は、ステップS605の処理に移行し、次にレコメンド値の高い店舗等をレコメンド対象として設定してステップS602以降の処理を実行する。したがって、リアルタイムな空席状況に応じた店舗等をレコメンドすることができ、ブロック上に格納されたトランザクションデータを好適に活用することができる。なお、ステップS604では、端末100Dにより実行指示を受信することで実行された場合には、端末100Dの入出力部130へ表示し、ユーザの入出力部130に対する操作(入力操作)に基づいて開始された場合には、当該入出力部130へ表示すればよい。
なお、この例では、レコメンド対象として移動手段を含む例を示したが、移動手段についてはレコメンド対象から除外してもよい。また、予めユーザの設定によりレコメンド対象として移動手段を含むか否かが設定可能であってよいし、例えば、当該レコメンド処理が実行された時間が22:00前であれば移動手段をレコメンド対象から除外し、22:00以降であればレコメンド対象として含むようにするなど、ユーザにより設定可能な所定時刻よりも前であるか否かによりレコメンド対象として移動手段を含むか否か、すなわち店舗のみとするか否かが異なっていてもよい。
また、ステップS604の処理では、レコメンド対象の店舗等(この例では店舗3)を入出力部130に表示することで顧客Dに対してレコメンドする例を示したが、これに加えステップS603にて算出した空席数をさらに表示してもよい。これによれば現状の空席数をリアルタイムで把握することができる。また、図4のデータブロック登録処理において、入店および退店のトランザクションデータを登録する際に、例えば分析用付加データとして、カウンター席やテーブル席といった区分とその使用席数を合わせて登録しておき、カウンター席の空席数やテーブル席の空席数を表示するようにしてもよい。この場合、予めカウンター席の席数とテーブル席の席数とが、図3の初期登録処理時に店舗等の種別のハッシュチェーンにおけるインデックス値「0」のデータブロックに予め登録されていればよい。これによれば、グループでの入店を検討中のユーザについて、それぞれの席が離れてしまうといったことを防止できる。すなわち、レコメンドされた店舗等についてのグループ単位での入店が可能であるか否かをリアルタイムで把握することができ、ブロック上に格納されたトランザクションデータをより好適に活用することができる。
また、この例では、ステップS604の処理において入出力部130にレコメンド対象の店舗等を1つ表示する例を示したが、例えば3つ表示するなど、レコメンド対象の店舗等を複数表示してもよい。この場合、記憶部110に表示数カウンタを設け、ステップS603にてYesと判定する度に、当該店舗等を出力用として記憶するとともに、当該表示数カウンタの値を1減算してステップS605、S602、S603の処理を行い、当該表示数カウンタの値が「0」となったときに当該出力用として複数(この場合は3つ)記憶した店舗等をステップS604の処理により表示すればよい(合わせて空席数も表示してもよい)。なお、表示数カウンタの値はステップS604の処理にて「3」にクリアされればよく、また、当該表示数カウンタの値は、ユーザにより変更可能であればよい。これによれば複数の店舗等がレコメンドされるため、ユーザの選択肢の幅を広げることができる。
さらに、図3の初期登録処理時に店舗等の種別のハッシュチェーンにおけるインデックス値「0」のデータブロックに当該店舗等の住所(緯度経度情報など)を登録しておき、当該出力用として記憶された店舗等のうち、ユーザにより設定された距離範囲内(現在位置から設定範囲内)に位置する店舗等を表示するようにしてもよい。また、図14のレコメンド対象決定処理におけるステップS601の処理において、予めユーザにより設定された距離範囲(設定範囲)外の店舗等を除外し、設定範囲内の店舗等のうち最も高いレコメンド値の店舗等をレコメンド対象としてもよい(ステップS605についても同様)。なお、現在地については、ユーザの所有する携帯端末の位置情報から取得すればよい。これによれば、現在地から遠い店舗等がレコメンドされてしまうことを防止でき、好適なレコメンドが可能となる。
このように、この実施の形態における情報処理装置100は、ハッシュチェーンで連結されたデータブロックに格納されたトランザクションデータから、任意の期間のデータを抽出して、有向二部グラフを生成する。そして、当該有向二部グラフを生成した後に発生したトランザクションデータをデータブロックから抽出して新たな有向二部グラフを生成し、それを加算することで有向二部グラフを編成して最新化することができる。また過去のトランザクションデータに対応する部分の有向二部グラフを減算することで、当該有向二部グラフから、時間が経過した過去分の影響を減ずることができる。すなわち、加算や減算を行うことで、いずれの期間のトランザクションを対象にレコメンドを行うかといった時間軸を任意に調整することが可能となる。そして、このように任意に調整可能な時間軸に含まれるトランザクションデータを対象としてレコメンド値を算出し、リアルタイムな空席状況に応じた店舗等をレコメンドすることで、トランザクションデータを好適に分析可能となり、さらに、当該分析結果に基づいて対象者に対し好適なレコメンドが可能となる。すなわち、ブロック上に格納されたトランザクションデータを好適に活用することができる。
次に、顧客の行動変化に伴うレコメンド値の遷移について、図16、図18および図19を用いて説明する。
顧客Dが店舗2を訪れたといった内容のトランザクションデータが、顧客Dの種別のハッシュチェーンおよび店舗2の種別のハッシュチェーンにそれぞれ登録された後、レコメンド処理が実行されることにより、上述したように図16に示す有向二部グラフが生成され、顧客Dに店舗3がレコメンドされる。このような状態で、顧客Dがさらに店舗1を訪れた場合(店舗2を退店して店舗1に入店した場合)を例に、以下説明する。
顧客Dがさらに店舗1に入店したという新たなトランザクションが発生することで、図4のデータブロック登録処理により、当該トランザクションの内容が顧客Dの種別のハッシュチェーンおよび店舗1の種別のハッシュチェーンにそれぞれ登録される(図示省略)。そして、図12に示すレコメンド処理が実行されると、ステップS401の処理において、情報処理装置100は、顧客Dの種別のハッシュチェーンと店舗1の種別のハッシュチェーンから当該内容のトランザクションデータを取得する。
続いて、情報処理装置100は、ステップS402の処理により、図16に示す有向二部グラフを編成して図18に示す有向二部グラフとする。具体的には、図16に示す有向二部グラフに対し、顧客Dの頂点と店舗1とを結ぶ辺(矢印)を加算する(図18参照)。なお、この場合、顧客Dの辺が2つになり、いずれも訪問回数が1回であることから、顧客Dから店舗1への重みが0.5となり、また、店舗2への重みが0.5となる。そのため、ステップS402の処理では、図16における顧客Dから店舗2への辺の太さを0.5の重みに対応した太さへと編成するとともに、店舗1への辺の太さを0.5の重みに対応した太さで加算する(図18参照)。
続いて、図12のステップS403の処理、すなわち図13のレコメンド値算出処理において、情報処理装置100は、図18に示すように、レコメンド対象である顧客Dに1.00の値を与える。そして、顧客Dに結ばれている辺は店舗1と店舗2であることから、それぞれの重みの0.50を乗じて、顧客Dから見た店舗1の値を0.50(図18に示す店舗1の値1)、店舗2の値を0.50(図18に示す店舗2の値1)をそれぞれ算出する(図13のステップS501)。
また、店舗1側からの重みは、顧客Aへの重みが1.00であることから、図13のステップS502の処理において、店舗1から見た顧客Aの値を、値1の0.50に重みの1.00を乗じて0.50(図18に示す顧客Aの値2)と算出する。また、店舗2側からの重みは、顧客Bへの重みが0.40、顧客Cへの重みが0.60であることから、図13のステップS502の処理において、店舗2から見た顧客Bの値を、値1の0.50に重みの0.40を乗じて0.20(図18に示す顧客Bの値2)と算出し、顧客Cの値を、値1の0.50に重みの0.60を乗じて0.30と算出する(図18に示す顧客Cの値2)。
そして、情報処理装置100は、図13のステップS503の処理において、図19に示すように、顧客A、顧客Bおよび顧客Cのそれぞれの値(図16に示す顧客A、顧客Bおよび顧客Cの値2)に、顧客側から店舗側方向の重みを乗じて、それぞれの店舗のレコメンド値を算出する。
具体的に、情報処理装置100は、図13のステップS503の処理において、レコメンド処理部126の機能により、顧客Aの値2の0.50に店舗1への重み0.40を乗じて0.20を算出し、店舗1のレコメンド値(図19に示す店舗1のレコメンド値)とする。また、情報処理装置100は、レコメンド処理部126の機能により、顧客Aの値2の0.50に店舗3への重み0.40を乗じて0.20を算出する。また、顧客Bから店舗3への辺も存在することから、顧客Bの値2の0.20に店舗3への重み0.60を乗じて0.12を算出する。さらに、顧客Cから店舗3への辺も存在することから、顧客Cの値2の0.30に店舗3への重み0.20を乗じて0.06を算出する。そして、これらの値を合計して(0.20+0.12+0.06)、店舗3のレコメンド値0.38(図19に示す店舗3のレコメンド値)とする。続いて情報処理装置100は、レコメンド処理部126の機能により、顧客Aの値2の0.50に移動手段1への重み0.20を乗じて0.10を算出する。また、顧客Cから移動手段1への辺も存在することから、顧客Cの値2の0.30に移動手段1への重み0.20を乗じて0.06を算出する。そして、これらの値を合計して(0.10+0.06)、移動手段1のレコメンド値0.16(図19に示す移動手段1のレコメンド値)とする。次に、情報処理装置100は、レコメンド処理部126の機能により、顧客Bの値2の0.20に店舗2への重み0.40を乗じて0.08を算出する。また、顧客Cから店舗2への辺も存在することから、顧客Cの値2の0.30に店舗2への重み0.60を乗じて0.18を算出する。そして、これらの値を合計して(0.08+0.18)、店舗2のレコメンド値0.26(図19に示す店舗2のレコメンド値)とする。
その後、図12のステップS404の処理において、情報処理装置100は、レコメンド処理部126の機能により、ステップS403で算出したレコメンド値に基づいて、おすすめの店舗等を入出力部130に表示することで顧客Dに対してレコメンドする。この例におけるレコメンド値は、図19に示すように、店舗3のレコメンド値(0.38)が最も大きく、次いで店舗2のレコメンド値(0.26)、その次が店舗1のレコメンド値(0.20)となっており、移動手段1のレコメンド値(0.16)が最も小さくなっている。店舗3については、顧客Dが現在入店中の店舗等ではないため、図14のステップS602の処理にて「No」と判定され、ステップS603の処理において当該店舗3に空席があれば店舗3が表示されることとなる。なお、店舗1〜3の他にも多くの店舗があってよく、レコメンド値の高さまたは空席数の多さの順に表示するようにしてもよい。
このように、顧客Dが店舗1に入店したという新たなトランザクションが1つ発生するだけで、店舗2を訪れた顧客の影響が低下し、レコメンド値が変化する。また、上述したように、顧客Dの行動だけでなく、通常は、様々な顧客の行動に対応したトランザクションが発生し、それに伴って有向二部グラフはリアルタイムで更新が行われていることから、発生したトランザクションデータの影響をさらに受けることでレコメンド値が逐一変更されるとともに、空席状況についても逐一変更されることとなる。したがって、レコメンド対象者に対し、より精度良くリアルタイムなレコメンドを行うことができる。
(変形例)
なお、この発明は、上記実施の形態に限定されず、様々な変形及び応用が可能である。例えば、情報処理装置100では、上記実施の形態で示した全ての技術的特徴を備えるものでなくてもよく、従来技術における少なくとも1つの課題を解決できるように、上記実施の形態で説明した一部の構成を備えたものであってもよい。また、下記の変形例それぞれについて、少なくとも一部を組み合わせてもよい。
上記実施の形態におけるレコメンド処理では、レコメンド値の高い店舗が現状空席であるか否かを判定してレコメンドする例を示したが、これは一例である。上記実施の形態におけるレコメンド処理において、例えば店舗毎の滞在時間やトランザクションデータの順序性を考慮したレコメンド処理を行うようにしてもよい。具体的に、店舗2を訪れた顧客は平均して入店から1時間以内に退店する可能性が高いといったことや、店舗3については入店から3時間以内に退店する可能性が高いといった店舗毎の平均滞在時間を用いたレコメンドを行うようにしてもよい。また、店舗2を訪れた顧客は、次に店舗3を訪れる可能性が高いといったことや、店舗3から店舗2といった順に訪問する顧客は少ないといったこと、さらに、23:00を越えると移動手段1の利用が増加する、などといった順序性(行動連続性)を用いたレコメンドを行うようにしてもよい。
この場合、例えば、図20に示すように、店舗2に着目し、店舗2と結ばれた顧客のトランザクションデータ(顧客B〜顧客D)を抽出する。これにより、抽出した顧客のハッシュチェーンに連なる一連のトランザクションデータに店舗2が含まれることとなる。その前後のトランザクションデータが何であるか、および入店と退店の時間間隔がいかほどであるか、を分析することが可能となる。
そして、抽出したトランザクションデータについて、着目した店舗2を基準として、その前後のトランザクションデータが何であるか、すなわち頻度が高いトランザクションデータの種類を特定することができる。図示する例では、店舗2を退店した後に、顧客Bおよび顧客Cが店舗3に入店していることから、着目した店舗2を訪問した顧客は、次に店舗3を訪れる可能性が高いことがわかる。そして、顧客Bと顧客Cは移動手段1を利用しており、いずれも23:00以降であることから、23:00を過ぎた場合に、移動手段1を利用する可能性が高いことがわかる。また、図示する例では、顧客Bは店舗2に50分間滞在し、顧客Cは店舗2に40分滞在し、顧客Dは店舗2に30分滞在している。そのため、店舗2を訪問した顧客の平均滞在時間は40分と算出できる。なお、滞在時間は、退店を示すトランザクションデータと入店を示すトランザクションデータ、すなわち同内容のトランザクションデータについての時間差を、タイムスタンプに基づいて算出すればよい。
次に、店舗毎の滞在時間やトランザクションデータの順序性に着目してレコメンドを行う場合について、図21を参照して具体的に説明する。図21は、図12のステップS404の処理にて行われるレコメンド対象決定処理の一例を示すフローチャートであり、図14に示すレコメンド対象決定処理と同内容の処理については説明を省略する。
図21のレコメンド対象決定処理を開始すると、情報処理装置100は、まず、行動連続性の判定と限界時間を指定する(ステップS601A)。具体的にステップS601Aの処理では、各店舗に着目し、当該店舗の前後に訪れる店舗を特定する。図20に示す例で説明すると、ステップS601Aでは、店舗2を訪問した顧客は、次に店舗3を訪れる可能性が高いといった行動連続性を、店舗毎に着目して判定する。また、ステップS601Aでは、移動手段1を利用する時間、すなわちこれ以上時間が経過した場合には店舗を訪れる可能性が低い(移動手段1を利用する可能性が高い)ことを示す限界時間を指定する。図20に示す例で説明すると、23:00を過ぎた場合に、移動手段1を利用する可能性が高いことから、ステップS601Aでは限界時間として23:00を指定する。なお、限界時間についてはユーザにより設定可能であってもよい。なお、限界時間は、例えば、各顧客が1日の最後に滞在していた店舗を退店して移動手段1を利用した時間の平均値であってもよいし、中央値であってもよく、予め定められた算出手法により算出されればよい。
ステップS601Aの処理を実行した後、情報処理装置100は、当該レコメンド対象決定処理を実行した時刻である現在時刻が限界時間より前であるか否かを判定する(ステップS601B)。図20に示す例で説明すると、ステップS601Bでは、23:00より前であるか否かを判定する。限界時間より前である場合(ステップS601B;Yes)、行動連続性の判定に基づいてレコメンド値を更新し(ステップS601C)、ステップS601の処理(図14の処理と同様)に移行する。ステップS601Cの処理では、図20に示す例で説明すると、店舗2を訪問した顧客は、次に店舗3を訪れる可能性が高いことから、現在入店中の店舗が店舗2である場合、店舗3に対応するレコメンド値に0.50を加算して更新する。なお、加算する値(連続性加算値)は、次に入店する可能性のある店舗の割合に応じて決定すればよい。例えば店舗2の次に入店する店舗として店舗1と店舗3とがあり、店舗1に入店した顧客が2名、店舗3に入店した顧客が2名存在した場合、店舗2から店舗1に入店する割合は0.5、店舗2から店舗3に入店する割合は0.5となることから、ステップS601Bの処理では、それぞれ、その半分の値を加算する。具体的に、店舗1に対応するレコメンド値に0.25を加算するとともに、店舗3に対応するレコメンド値に0.25を加算する。なお、この例では割合の半分の値を加算する例を示したが、割合の値そのままを加算してもよい。また、行動連続性による加算をいかほどとするか、ユーザにより選択可能としてもよい。また、例えば店舗2から店舗4に入店する顧客がいないような場合(そのような履歴情報を示すトランザクションデータが存在しない場合)、レコメンド値を減算させるよう更新可能であってもよい。このように、行動連続性によりレコメンド値を更新することで、現在入店中の店舗から次に入店する店舗について、行動連続性に沿った店舗をレコメンドすることができる。さらに、当該処理を実行した時間帯(例えば20:30など)を考慮し、例えば所定の曜日の20:00〜21:00に店舗2に滞在していた顧客(当該時間に店舗2に入店中の顧客のトランザクションデータを抽出すればよい)が次に入店した店舗の割合を算出し、当該割合に基づいてレコメンド値を更新してもよい。これによれば、定休日の店舗や営業時間終了後の店舗をレコメンドするといったことを防止できるとともに、当該時間帯の行動連続性に沿った店舗をレコメンドすることができる。また、店舗2を2軒目の訪問店舗とした顧客のトランザクションデータを抽出し、次に(3軒目として)入店した店舗の割合を算出し、当該割合に基づいてレコメンド値を更新してもよい。これによれば、2軒目として店舗2を訪問した顧客が次に入店した店舗がレコメンドされ易く、顧客の好みに沿った店舗をレコメンドすることが可能となる。さらに、当該店舗2の滞在時間がレコメンド対象のユーザと近似している顧客が次に入店した店舗のレコメンド値を加算するようにしてもよい。この場合、レコメンド対象のユーザと滞在時間が近似している程、加算値が高くなるようにすればよい。これによれば、レコメンド対象のユーザと似た行動パターンの顧客が入店した店舗がレコメンドされるため、ユーザの好みに合った店舗をレコメンドすることができる。
また、平均滞在時間については、ステップS603の処理にてレコメンド対象の店舗に空席無しと判定したとき(ステップS603;No)に、当該平均滞在時間を活用すればよい。具体的に、レコメンド対象に設定されている店舗、すなわちレコメンド値の高い店舗(レコメンド対象店舗)について、現在満席であるとステップS603で判定した場合(ステップS603;No)、情報処理装置100は、現在レコメンド対象店舗に滞在中の顧客について、現在時刻と入店時刻を比較し、平均滞在時間から所定時間前の顧客(すなわち滞在時間が所定時間後に平均滞在時間となる顧客)を、当該店舗の種別のハッシュチェーンに登録されたデータブロックの内容から確認し、現在は満席ではあるものの、所定時間後にレコメンド対象店舗が空きとなる可能性を予想する(ステップS603A)。そして、所定時間後に空きとなるか否かを判定し(ステップS603B)、空きとなる可能性が高い(空き予想有り)と判定した場合(ステップS603B;Yes)には、ステップS604の処理に移行し、空きとなる可能性が低い(空き予想無し)と判定した場合(ステップS603B;No)には、ステップS605の処理に移行すればよい。なお、所定時間については、ユーザにより設定可能であればよい。また、所定時間後に空きとなる可能性については、平均滞在時間から所定時間前の顧客が存在する場合に高いと判定し、存在しない場合には低いと判定すればよい。また、ステップS604の処理にて、平均滞在時間から所定時間前の顧客が1人である場合は65%、3人である場合は80%など、平均滞在時間から所定時間前の顧客の人数に応じて所定時間後に空きとなる可能性を上下させ視認表示してもよい。このように、着目した店舗のハッシュチェーンに連結されたデータブロックから、顧客の平均滞在時間を算出して活用することで、当該レコメンド値と平均滞在時間に基づいて、店舗の空き状況をより精度よく分析してリアルタイムなレコメンドを行うことができるとともに、店舗側にとって顧客の回転率を向上させ集客率を向上させることができる。
また、図14に示すレコメンド対象決定処理では、理解を容易にするために、ステップS602にて現在入店中と判定した場合や、ステップS603にて空席無しと判定した場合、ステップS605の処理にて次点のレコメンド値の店舗等をレコメンド対象とする例を示したが、例えば、当該ステップS605の処理には、現在入店中の店舗等や空席無しと判定した店舗等に対応するレコメンド値を減算(例えば「0」にするなど)してから(空席有りと判定した店舗等のレコメンド値に「1」を加算してもよい)次点のレコメンド値の店舗等をレコメンド対象とする処理を行うことが含まれていてよい。そして、ステップS604の処理では、全ての店舗等について、空席状況に応じてレコメンド値を更新し、更新後のレコメンド値の高い順にレコメンドすればよい。また、図21に示すレコメンド対象決定処理におけるステップS605およびステップS604の処理についても同様である。さらに、ステップS601Bにて限界時間前ではないと判定した場合、ステップS601Dの処理においても、移動手段1に対応するレコメンド値以外のレコメンド値を全て減算して「0」にし(移動手段1に対応するレコメンド値に「1」を加算してもよい)、最も高いレコメンド値に対応する店舗等をレコメンドすることが含まれていてよい。すなわち、限界時間であるか否か、行動連続性、および空席の有無、といった複数種類の条件に応じて、対応するレコメンド値を増減させ、当該増減後のレコメンド値に基づいて、レコメンドを行うようにしてもよい。これによれば、ユーザの所望する条件に沿った店舗等をリアルタイムでレコメンドすることができ、ブロック上に格納されたトランザクションデータを好適に活用することができる。なお、これらの条件は、例えば行動連続性によってのみレコメンド値を増減させるといったように1つのみであってもよいし、行動連続性と空席の有無により増減させるといったように2つの条件を組み合わせてもよいし、全ての条件を組み合わせてもよい。当該条件の組合せはユーザによる設定により変更可能であればよい。増減させる値(増減値)は、条件に応じて異なる値であってもよいし、条件によらず共通の値であってよい。増減値についてもユーザにより設定可能であればよい。また、当該条件は、上記の3種類に限られず、現在位置からの距離や天気、用途や人数など複数条件あってよい。
また、この例では、行動連続性を用いてレコメンド値を更新し、顧客に店舗等をレコメンドする例を示したが、この他にも、店舗等が当該行動連続性を用いて顧客に対しクーポンの発行を行うようにしてもよい。図20に示す例で説明すると、店舗2を訪問した顧客は、次に店舗3を訪れる可能性が高いという行動連続性を用いて、店舗3は、現在店舗2に滞在している顧客についてクーポンを発行するようにしてもよい。これによれば、入店する可能性の高い顧客に対してクーポンを発行することができ、より集客率を向上させることが可能となる。また、現在店舗2に滞在している顧客で、かつ平均滞在時間から所定時間前の顧客(すなわち滞在時間が所定時間後に平均滞在時間となる顧客)に対してクーポンを発行してもよい。また、限界時間から所定時間前の顧客(すなわち所定時間後に限界時間となる顧客)に対して、移動手段1がクーポンを発行するようにしてもよい。なお、クーポンの発行は、対象の顧客の端末100Dに送信されることで発行されればよい。
また、上記実施の形態では、レコメンド対象者へのレコメンド(レコメンド処理)がレコメンド対象者である顧客Dが店舗2に入店したというトランザクションが発生した後に行われる例を示した。すなわち、1軒目の店舗から2軒目の店舗をレコメンドするなど、レコメンド対象者が何らかの店舗に入店していることを前提としたが、情報処理装置100は、例えば、1軒目に入店する店舗をレコメンドする機能も備えていてよい。
この場合、例えば、レコメンド対象者のユーザから指定された期間および地域に対応する店舗のデータブロックを抽出し、顧客からの評価の平均値を算出し、当該平均値の高い順にレコメンドすればよい。顧客からの評価については、退店のトランザクションデータの登録時に、分析用付加データとして合わせて登録されていればよい(例えば5段階評価)。また、評価の平均値の高い順に限られず、レコメンド対象者の現在値に近い順にレコメンドするようにしてもよい。これによれば、評価の高い店舗が常に表示され易く特定の店舗へ集中してしまうことを防止することができる。なお、評価の平均値の低い順に表示するようにしてもよい。さらに、退店のトランザクションデータの登録時に、分析用付加データとして会計金額を登録しておき、顧客の平均支払い金額を算出し、当該平均支払い金額の低い順(または高い順)にレコメンドするようにしてもよい。さらに、これらを組み合わせ、優先順位(距離>金額>評価の順の優先順位など任意に設定可能であればよい)に基づいてレコメンドしてもよい。
なお、上述の機能を、OS(Operating System)とアプリケーションとの分担、またはOSとアプリケーションとの協同により実現する場合等には、OS以外の部分のみを媒体に格納してもよい。
また、搬送波にプログラムを重畳し、通信ネットワークを介して配信することも可能である。例えば、通信ネットワーク上の掲示板(BBS、Bulletin Board System)に当該プログラムを掲示し、ネットワークを介して当該プログラムを配信してもよい。そして、これらのプログラムを起動し、オペレーティングシステムの制御下で、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行できるように構成してもよい。