本発明における情報処理装置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から受信したことに基づいて、新たなデータブロックを生成して当該受信データを格納し、既存のハッシュチェーンに連結する、ハッシュチェーン登録装置として機能する。なお、上述したように、観光客A~Dの端末100Dが情報処理装置100として機能することもあることから、情報処理装置100は、トランザクションデータを生成し、ネットワーク210へ配信する機能を有するトランザクション生成装置として機能することもある。ハッシュチェーン登録装置にて登録された内容は、ネットワーク210を介して、各情報処理装置100で共有される。また、通常、一定数のトランザクションデータが一つのデータブロックに格納される(一定数のトランザクションデータをひとまとめにして一つのブロックに格納する)が、この実施の形態では、理解を容易にするため、一つのトランザクションデータが一つのデータブロックに格納されるものとする。
この実施の形態において、観光客と観光スポットとの間で発生した事象により生成された(端末Dがトランザクション生成装置として機能して生成された)トランザクションデータは、データブロックと呼ばれる一つの単位に格納され、当該データブロックを時系列に連結したそれぞれの種別のハッシュチェーンによって管理される。例えば、観光客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~4のそれぞれの種別に対応するハッシュチェーンであり、それぞれのハッシュチェーンは、トランザクションデータが格納されたデータブロックが連結されたものである。各種別のハッシュチェーン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や端末C~端末Gとネットワーク210を介して通信を行うためのデバイスである。
以上が、情報処理装置100の構成である。続いて情報処理装置100の動作などについて、図3~図17を参照して説明する。まず、ハッシュチェーン登録装置として機能した場合における情報処理装置100の動作について、図3~7を参照して説明する。
まず、ユーザの入出力部130に対する操作(入力操作)や、端末100Dから受信した要求(登録要求)に基づいて、図3に示す初期登録処理が行われる。初期登録処理は、新たな種別のハッシュチェーンを生成するために必要な初期情報を登録する処理である。この例では、理解を容易にするため、観光客Cについての初期登録を行う場合について説明する。初期登録処理を開始すると、情報処理装置100は、初期登録部121の機能により、種別データを生成する(ステップS101)。具体的に、ステップS101では、入力操作や登録要求に含まれる、種別情報である観光客Cの情報および観光客Cのアドレスを、観光客Cの種別のハッシュチェーンを生成するための情報として、記憶部110へ登録する。なお、当該情報は、各種別のハッシュチェーン111のうちの種別Cのハッシュチェーンとして登録されればよい。また、種別情報は登録せず、アドレスのみ登録するようにしてもよい。なお、この実施の形態では、観光客A~Dのアドレスをそれぞれ01~04、観光スポット1~4のアドレスをそれぞれX1~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」により、どの観光客がどの観光スポットを訪れたかが示される。なお、例えば顧客が店舗にて商品を購入したことを示す場合には、価値の大きさを、例えばコインの移動量を示すデータをさらに登録することで示してもよい。なお、観光客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(A)に示すように9個のトランザクションが発生した場合(図6(B)に示す場合には10個)には、図4に示すデータブロック登録処理が9回(図6(B)に示す場合には10回)行われ、対象となる種別のハッシュチェーンにそれぞれのトランザクションデータが登録されることとなる。図7は、図6(A)に示す9個のトランザクションについて図4に示すデータブロック登録処理が9回行われた場合におけるそれぞれのハッシュチェーンの登録内容を示している。なお、図7に示す例では、理解を容易にするため、各データブロックに格納されているハッシュ値や分析用付加データについては省略している。
具体的に、図6(A)の1つ目のトランザクションに対応する観光客Aが観光スポット1を訪れたというトランザクションデータは、図4に示すデータブロック登録処理が行われることにより、図7に示す観光客Aの種別のハッシュチェーンにおけるデータブロック(1)および観光スポット1の種別のハッシュチェーンにおけるデータブロック(1)に登録される。図6(A)の2つ目のトランザクションに対応する観光客Aが観光スポット4を訪れたというトランザクションデータは、図4に示すデータブロック登録処理が再度行われることにより、図7に示す観光客Aの種別のハッシュチェーンにおけるデータブロック(2)および観光スポット4の種別のハッシュチェーンにおけるデータブロック(1)に登録される。そして、図6(A)の3つ目のトランザクションに対応する観光客Bが観光スポット2を訪れたというトランザクションデータは、図4に示すデータブロック登録処理が再度行われることにより、図7に示す観光客Bの種別のハッシュチェーンにおけるデータブロック(1)および観光スポット2の種別のハッシュチェーンにおけるデータブロック(1)に登録される。このように、トランザクションの数に対応した回数のデータブロック登録処理が行われることにより、それぞれのトランザクションデータが対応する種別のハッシュチェーンに連結する(図6(A)の4つ目以降のトランザクションについても同様)。
以上がハッシュチェーン登録装置として機能した場合における情報処理装置100の動作である。続いてレコメンド装置として機能した場合における情報処理装置100の動作について、図8~図17を参照して説明する。なお、理解を容易にするため、以下の例では、図6(A)に示す9個のトランザクションが発生して各トランザクションに対応して9回のデータブロック登録処理が行われ、図7に示すように各ハッシュチェーンのデータブロックが登録されているものとする。また、その後に図6(B)に示す10個目のトランザクションが発生し、10個目のトランザクション(観光客Dが観光スポット2を訪れた)の内容が、観光客Dの種別のハッシュチェーンおよび観光スポット2の種別のハッシュチェーンにそれぞれ登録されるものとして、以下説明する。
図8は、グラフ生成処理の一例を示すフローチャートである。当該グラフ生成処理は、ユーザの入出力部130に対する操作(入力操作)に基づいて開始される。当該グラフ生成処理は、各種別のハッシュチェーン111からユーザに所望された期間のトランザクションデータを取得し、有向二部グラフを生成するための処理である。有向二部グラフの詳細については後述する。なお、この実施の形態では、図4に示すデータブロック登録処理により、図7に示す登録内容のハッシュチェーンが生成されており(すなわち、図6(A)に示す9個のトランザクションが発生して各トランザクションに対応して9回のデータブロック登録処理が行われた状態)、図7に示す全てのブロックを対象とした有向二部グラフを生成する場合を例に説明する。
グラフ生成処理を開始すると、情報処理装置100は、データ取得部124の機能により、まず、グラフ生成の対象が指定されているか否かを判定する(ステップS301)。具体的に、ステップS301では、ユーザの入力操作により対象の期間(開始時間と終了時間)が指定されているか否かを判定する。
ステップS301にて対象の期間が指定されていると判定した場合(ステップS301;Yes)、情報処理装置100は、データ取得部124の機能により、指定された期間に対応するデータブロックのトランザクションデータ(対象データ)を取得する(ステップS302)。ステップS302では、ユーザの入力操作により指定された期間に対応するデータブロックを、分析用不可データに含まれるタイムスタンプに基づいて特定し、当該データブロックに登録されたトランザクションデータ(対象データ)を取得する。
一方、ステップS301にて対象の期間が指定されていないと判定した場合(ステップS301;No)、情報処理装置100は、データ取得部124の機能により、全てのデータブロックのトランザクションデータ(対象データ)を取得する(ステップS303)。上述したように、この実施の形態では、図7に示す全てのブロックを対象とした有向二部グラフを生成することから、ステップS303では、図7に示す全てのブロックのトランザクションデータが取得される。
ステップS302またはステップS303の処理を実行した後、情報処理装置100は、グラフ生成部125の機能により、トランザクションデータの内容に基づいて、種別毎に重みを算出する(ステップS304)。具体的に、ステップS304の処理では、図9(A)に示すように、観光客Cが観光スポット2を4回訪問しており、観光スポット3を1回訪問しており、合計で5回の観光をしているような場合、ステップS304では、図9(B)に示すように、各観光スポットへの訪問回数を合計値で除算して重みを算出する。観光客Cは、観光スポット2を4回訪問しており、観光スポット3を1回訪問していることから、図9(B)に示すように、それぞれの重みは、0.80と0.20となる。ステップS304では、この処理を全ての観光客について行うとともに、観光スポット側についても同様の処理を行う。例えば、観光スポット1については、観光客Aのみが2回訪問していることから、観光スポット1から観光客Aに対する重みは1.00となる(図10参照)。観光スポット2については、観光客Bが1回、観光客Cが4回訪問しているため、観光スポット2から観光客Bに対する重みが0.20、観光客Cに対する重みが0.80となる(図10参照)。
図8に戻り、ステップS305の処理にて全ての種別について重みを算出した後、情報処理装置100は、グラフ生成部125の機能により、それぞれの種別のうち、起点(From)と終点(To)である取引対象をそれぞれ頂点とし、それぞれの頂点を辺で結んだ有向二部グラフを生成し(ステップS305)、グラフ生成処理を終了する。具体的に、ステップS305の処理では、それぞれの観光客を起点としそれぞれの観光スポットを終点とした頂点を、訪問有無に応じて辺で結び、図10に示すような有向二部グラフを生成する。なお、図示する例では、理解を容易にするため、観光客側から観光スポット方向への矢印のみにて辺を表し、かつ、図8のステップS304にて算出した重みを、観光客側と観光スポット側のそれぞれで記載しているが、実際には、辺(矢印)の太さにより片側方向(観光客から観光スポット方向)の重みを表す(辺が太いほど重みが大きい)。この場合、観光スポット側から観光客側方向への辺(矢印)の太さにより、観光スポット側から(観光スポットから観光客方向)の重みを表せばよい。すなわち、ステップS305では、ステップS304にて算出した重みに応じた太さの辺(矢印)で、頂点をそれぞれの方向から結べばよい。
この実施の形態における観光客Aは、観光スポット1と観光スポット4を訪れていることから(図6(A)、図7参照)、図10に示すように、観光客Aの頂点は、観光スポット1と観光スポット4と結ばれる。観光客Bは、観光スポット2を訪れているため(図6(A)、図7参照)、観光客Bの頂点は、観光スポット2と結ばれる。観光客Cは、観光スポット2と観光スポット3を訪れていることから(図6(A)、図7参照)、図10に示すように、観光客Cの頂点は、観光スポット2と観光スポット3と結ばれる。なお、当該有向二部グラフには、図10に示すように、訪問回数に応じて図8のステップS304で算出された重みが含まれる(観光客側からの辺(矢印)の太さや、観光スポット側からの辺(矢印)の太さによりそれぞれの方向からの重みが表される)。
このように、グラフ生成処理が実行されることにより、図10に示す有向二部グラフが生成されることとなる。このような状態において、図6(B)に示す10個目のトランザクションが発生すると、図4のデータブロック登録処理により、10個目のトランザクション(観光客Dが観光スポット2を訪れた)の内容が、観光客Dの種別のハッシュチェーンおよび観光スポット2の種別のハッシュチェーンにそれぞれ登録される(図示省略)。このような状況において、観光客Dに対しておすすめの観光スポットを提示する場合(観光客Dを推薦対象者(レコメンド対象とも言う)としておすすめの観光スポットを推薦する場合)におけるレコメンド処理について、以下説明する。なお、通常は、様々なトランザクションが発生するため、図10に示す有向二部グラフについても、これに合わせてリアルタイムで更新されるが、この実施の形態では、理解を容易にするため、観光客Dが観光スポット2を訪れたという内容のトランザクションのみ発生し、その他のトランザクションについては発生しないものとする。すなわち、図10に示す有向二部グラフは、リアルタイムでの更新が行われていないものとして以下説明する。
図11は、レコメンド処理の一例を示すフローチャートである。当該レコメンド処理は、端末100Dにより実行指示を受信することで実行されるものであるが、ユーザの入出力部130に対する操作(入力操作)に基づいて開始されてもよい。
図11に示すレコメンド処理を開始すると、情報処理装置100は、レコメンド処理部126の機能により、指定されたデータブロック(対象ブロック)のトランザクションデータを取得する(ステップS401)。この例では、図6(B)に示す10個目のトランザクション(観光客Dが観光スポット2を訪れた)が対象であることから、観光客Dの種別のハッシュチェーンと観光スポット2の種別のハッシュチェーンから当該内容のトランザクションデータを取得する。なお、対象のトランザクションデータの取得については、例えば、FromとToの内容と期間とを指定して行えばよい。
ステップS401の処理を実行した後、情報処理装置100は、レコメンド処理部126の機能により、図8のグラフ生成処理にて生成した有向二部グラフを編成する(ステップS402)。この例では、観光客Dが観光スポット2を訪れたというトランザクションが追加されたことから、図10に示す有向二部グラフに、当該新たなトランザクションデータに対応する有向二部グラフが加算される。具体的に、この例におけるステップS402では、図13に示すように、観光客Dの頂点を観光スポット2と結ぶ処理が行われる。なお、この例では、新たな観光客Dが観光スポット2を訪れたというトランザクションであったため、新たな辺(矢印)で結ぶ例を示したが、例えば、既存の観光客が既に訪問した観光スポットを再度訪問したような場合、すなわち訪問回数が増加した場合については、辺(矢印)の太さを、重みに応じて太い態様へと編成すればよい。
また、この例では、観光客Dが観光スポット2を訪れたというトランザクションが追加された場合について示していることから、新たなトランザクションデータに対応する有向二部グラフが図10に示す有向二部グラフに加算される例を示したが、過去のトランザクションデータに対応する有向二部グラフを減算するようにしてもよい。例えば、図6(A)に示す1個目のトランザクションに対応する有向二部グラフを減算する場合(観光客Aが観光スポット1を訪れたというトランザクションを削除する場合)には、観光客Aが観光スポット1への訪問回数が1減少するため(2回から1回となる)、図10における観光客Aから観光スポット1への辺(矢印)の太さを、重みに応じて細い態様へと編成すればよい(なお、観光スポット1から観光客Aへの辺(矢印)については、当該観光スポット1には観光客Aのみが訪問していることから重みが変更されないため、編成しなくてよい)。また、図6(A)に示す2個目のトランザクションに対応する有向二部グラフを減算する場合(観光客Aが観光スポット4を訪れたというトランザクションを削除する場合)には、観光客Aが観光スポット4への訪問回数が0回となるため、図10における観光客Aから観光スポット4への辺(矢印)を削除する編成を行うとともに、観光スポット4から観光客Aへの辺(矢印)を合わせて削除する編成を行えばよい。
図11のステップS402の処理を実行した後、情報処理装置100は、レコメンド処理部126の機能により、レコメンド値を算出するレコメンド値算出処理を実行する(ステップS403)。具体的に、ステップS403では、レコメンド対象の観光客が訪問した観光スポットのスコア(値1)を算出し、当該観光スポットを訪問した観光客のスコア(値2)を、値1に基づいて算出し、当該観光客が訪問した観光スポットのスコアをレコメンド値として、値2に基づいて算出する。換言すると、レコメンド対象者と似た行動を行っている観光客のスコアを算出し、当該スコアとその観光客の行動(訪れた観光スポット)から、レコメンド対象の観光客に対する行動(観光スポット)のレコメンド値を算出する。以下、観光客Dが観光スポット2を訪れた場合における、図11のステップS403におけるレコメンド値算出処理について、図12~図14を用いて説明する。
図12は、図11のステップS403の処理において実行されるレコメンド値算出処理の一例を示すフローチャートである。図12に示すレコメンド値算出処理において、情報処理装置100は、まず、レコメンド対象の観光客(推薦対象者)に初期値である1.00の値を与え、当該レコメンド対象者と結ばれた頂点(すなわち、推薦対象者に関連する取引対象)について、順方向(観光客から観光スポット方向)の重みを乗じて値1を算出する(ステップS501)。具体的に、ステップS501では、図13に示すように、レコメンド対象である観光客Dに1.00の値を与える。そして、観光客Dに結ばれている辺は観光スポット2のみであることから、重みの1.00を乗じて、観光客Dから見た観光スポット2の値を1.00と算出する(図13に示す観光スポット2の値1)。図12のステップS501の処理を実行した後、情報処理装置100は、値1を持つ頂点に結ばれた頂点(すなわち、値1の取引対象に関連する取引対象)について、逆方向(観光スポットから観光客方向)の重みを乗じて値2を算出する(ステップS502)。具体的に、ステップS502では、観光スポット2側からの重みは、観光客Bへの重みが0.20、観光客Cへの重みが0.80であることから、観光スポット2から見た観光客Bの値を、値1の1.00に重みの0.20を乗じて0.20(図13に示す観光客Bの値2)と算出し、観光客Cの値を、値1の1.00に重みの0.80を乗じて0.80と算出する(図13に示す観光客Cの値2)。
図12のステップS502の処理を実行した後、情報処理装置100は、値2を持つ頂点と結ばれた頂点(すなわち、値2の取引対象に関連する取引対象)について、順方向(観光客から観光スポット方向)の重みを乗じてレコメンド値を算出し(ステップS503)、レコメンド値算出処理を終了する。具体的に、ステップS502では、図14に示すように、観光客Bと観光客Cのそれぞれの値(図14に示す観光客Bおよび観光客Cの値2)に、観光客側から観光スポット側方向の重みを乗じて、それぞれの観光スポットのレコメンド値を算出する。より具体的に、情報処理装置100は、レコメンド処理部126の機能により、観光客Bの値2の0.20に観光スポット2への重み1.00を乗じて0.20を算出する。また、観光客Cから観光スポット2への辺も存在することから、観光客Cの値2の0.80に観光スポット2への重み0.80を乗じて0.64を算出する。そして、これらの値を合計して(0.20+0.64)、観光スポット2のレコメンド値0.84(図14に示す観光スポット2のレコメンド値)を算出する。また、情報処理装置100は、レコメンド処理部126の機能により、観光客Cの値2の0.80に観光スポット3への重み0.20を乗じて0.16を算出する。当該観光スポット3については観光客Cのみが訪れており、観光客Bは訪れていないことから、当該0.16の値をそのまま観光スポット3のレコメンド値(図14に示す観光スポット3のレコメンド値)とする。
このように、図12に示すレコメンド値算出処理では、レコメンド対象者に1.00の値を与え、当該レコメンド対象者と似た行動を取った者のスコア(値2)から当該レコメンド対象者向けのレコメンド値を算出する。
図11に戻り、ステップS403の処理にてレコメンド値を算出した後、情報処理装置100は、レコメンド処理部126の機能により、ステップS403の処理で算出したレコメンド値に基づいて、おすすめの観光スポットを入出力部130に表示することで観光客Dに対してレコメンドし(ステップS404)、レコメンド処理を終了する。図14に示す例において、観光スポット2のレコメンド値は0.84であり、観光スポット3のレコメンド値は0.16である。ステップS404では通常、最も大きいレコメンド値の観光スポットを表示するが、観光客Dは既に観光スポット2を直近で訪問していることから、この例では、次点である観光スポット3が表示される。なお、最も高いレコメンド値の観光スポットを未訪問であれば、その観光スポットが表示されればよい。さらに、最も高いレコメンド値の観光スポットを直近で訪問していなくとも、既に訪問している場合には、次点の観光スポットを表示するようにしてもよい。また、例えば、3回以上訪問している場合は表示しないなど、訪問回数に応じて表示するか否かを決定してもよい。また、表示する観光スポットは1つでなくてもよく、上位3つを表示するようにしてもよい。この場合、既に訪問した観光スポットが含まれる場合には、さらに次点のレコメンド値の観光スポットを表示させる(上位4つなど)ようにしてもよい。なお、ステップS404では、当該レコメンド処理は、端末100Dにより実行指示を受信することで実行された場合には、端末100Dの入出力部130へ表示し、ユーザの入出力部130に対する操作(入力操作)に基づいて開始された場合には、当該入出力部130へ表示すればよい。
このように、この実施の形態における情報処理装置100は、ハッシュチェーンで連結されたデータブロックに格納されたトランザクションデータから、任意の期間のデータを抽出して、有向二部グラフを生成する。そして、当該有向二部グラフを生成した後に発生したトランザクションデータをデータブロックから抽出して新たな有向二部グラフを生成し、それを加算することで有向二部グラフを編成して最新化することができる。また過去のトランザクションデータに対応する部分の有向二部グラフを減算することで、当該有向二部グラフから、時間が経過した過去分の影響を減ずることができる。すなわち、加算や減算を行うことで、いずれの期間のトランザクションを対象にレコメンドを行うかといった時間軸を任意に調整することが可能となる。したがって、トランザクションデータを好適に分析可能となり、さらに、当該分析結果に基づいて対象者にレコメンドすることが可能となる。
次に、観光客の行動変化に伴うレコメンド値の遷移について、図15~図18を用いて説明する。図6(B)に示す10個目のトランザクション(観光客Dが観光スポット2を訪れた)の内容が、観光客Dの種別のハッシュチェーンおよび観光スポット2の種別のハッシュチェーンにそれぞれ登録された後、レコメンド処理が実行されることにより、上述したように図14に示す有向二部グラフが生成され、観光客Dに観光スポット3がレコメンドされる。このような状態で、観光客Dがさらに観光スポット1を訪れた場合を例に、以下説明する。
観光客Dがさらに観光スポット1を訪れたという新たなトランザクションが発生することで、図4のデータブロック登録処理により、当該トランザクションの内容が観光客Dの種別のハッシュチェーンおよび観光スポット1の種別のハッシュチェーンにそれぞれ登録される(図示省略)。そして、図11に示すレコメンド処理が実行されると、ステップS401の処理において、情報処理装置100は、観光客Dの種別のハッシュチェーンと観光スポット1の種別のハッシュチェーンから当該内容のトランザクションデータを取得する。
続いて、情報処理装置100は、ステップS402の処理により、図14に示す有向二部グラフを編成する(図15参照)。具体的には、図14に示す有向二部グラフに対し、観光客Dの頂点と観光スポット1とを結ぶ辺(矢印)を加算する(図15参照)。なお、この場合、観光客Dの辺が2つになり、いずれも訪問回数が1回であることから、観光客Dから観光スポット1への重みが0.5となり、また、観光スポット2への重みが0.5となる。そのため、ステップS402の処理では、図14における観光客Dから観光スポット2への辺の太さを0.5の重みに対応した太さへと編成するとともに、観光スポット1への辺の太さを0.5の重みに対応した太さで加算する(図15参照)。
続いて、図11のステップS403の処理、すなわち図12のレコメンド値算出処理において、情報処理装置100は、図15に示すように、レコメンド対象である観光客Dに1.00の値を与える。そして、観光客Dに結ばれている辺は観光スポット1と観光スポット2であることから、それぞれの重みの0.50を乗じて、観光客Dから見た観光スポット1の値を0.50(図15に示す観光スポット1の値1)、観光スポット2の値を0.50(図15に示す観光スポット2の値1)とそれぞれ算出する(図12のステップS501)。
また、観光スポット1側からの重みは、観光客Aへの重みが1.00であることから、図12のステップS502の処理において、観光スポット1から見た観光客Aの値を、値1の0.50に重みの1.00乗じて0.50(図15に示す観光客Aの値2)と算出する。また、観光スポット2側からの重みは、観光客Bへの重みが0.20、観光客Cへの重みが0.80であることから、図12のステップS502の処理において、観光スポット2から見た観光客Bの値を、値1の0.50に重みの0.20を乗じて0.10(図15に示す観光客Bの値2)と算出し、観光客Cの値を、値1の0.50に重みの0.80を乗じて0.40と算出する(図15に示す観光客Cの値2)。
そして、情報処理装置100は、図12のステップS503の処理において、図16に示すように、観光客A、観光客Bおよび観光客Cのそれぞれの値(図16に示す観光客A、観光客Bおよび観光客Cの値2)に、観光客側から観光スポット側方向の重みを乗じて、それぞれの観光スポットのレコメンド値を算出する。
具体的に、情報処理装置100は、図12のステップS503の処理において、レコメンド処理部126の機能により、観光客Aの値2の0.50に観光スポット1への重み0.67を乗じて0.34を算出し、観光スポット1のレコメンド値(図16に示す観光スポット1のレコメンド値)とする。また、情報処理装置100は、レコメンド処理部126の機能により、観光客Aの値2の0.50に観光スポット4への重み0.33を乗じて0.17を算出し、観光スポット4のレコメンド値(図16に示す観光スポット4のレコメンド値)とする。また、情報処理装置100は、観光客Bの値2の0.10に観光スポット2への重み1.00を乗じて0.10を算出する。また、観光客Cから観光スポット2への辺も存在することから、観光客Cの値2の0.40に観光スポット2への重み0.80を乗じて0.32を算出する。そして、これらの値を合計して(0.10+0.32)、観光スポット2のレコメンド値0.42(図16に示す観光スポット2のレコメンド値)とする。また、情報処理装置100は、レコメンド処理部126の機能により、観光客Cの値2の0.40に観光スポット3への重み0.20を乗じて0.08を算出し、観光スポット3のレコメンド値(図16に示す観光スポット3のレコメンド値)とする。
その後、図11のステップS404の処理において、情報処理装置100は、レコメンド処理部126の機能により、ステップS403で算出したレコメンド値に基づいて、おすすめの観光スポットを入出力部130に表示することで観光客Dに対してレコメンドする。この例におけるレコメンド値は、図16に示すように、観光スポット2のレコメンド値(0.42)が最も大きく、次いで観光スポット1のレコメンド値(0.33)、その次が観光スポット4のレコメンド値(0.17)となっており、観光スポット3のレコメンド値(0.08)が最も小さくなっている。この場合、観光客Dが直近で訪れているのは観光スポット1であるため、情報処理装置100は、レコメンド値が最も大きい観光スポット2をおすすめの観光スポットとして表示する。なお、観光スポット1~4の全てを、レコメンド値の高い方から順に表示するようにしてもよい。その際には、レコメンド値順に、おすすめ度が視認可能なように、例えば数値や星の数など、付加的要素とともに表示してもよい。
このように、観光客Dが観光スポット1を訪れたという新たなトランザクションが1つ発生するだけで、観光スポット2を訪れた観光客の影響が低下し、レコメンド値が変化する。上述したように、通常は、様々なトランザクションが発生し、それに伴って有向二部グラフはリアルタイムで更新が行われていることから、発生したトランザクションデータの影響をより多く受け、レコメンド値が逐一変更されることとなる。したがって、レコメンド対象者に対し、より精度良くレコメンドすることができる。
続いて、観光客の行動変化に伴うレコメンド値の変化を示す例として、図16に示す状態から、観光客Dが観光スポット1をもう1回訪れ、さらに観光スポット4を訪れた場合を例に説明する。換言すると、図6(B)に示す状態から、観光客Dが観光スポット1を訪れたというトランザクションが発生した後、さらに、観光客Dが観光スポット1をもう1回訪れたというトランザクションと、観光スポット4を訪れたというトランザクションが発生した場合について説明する。なお、この状態において観光客Dは、観光スポット1を2回、観光スポット2および4をそれぞれ1回ずつ訪れており、観光客Aと似た行動となっている(観光客Aは、観光スポット1を2回、観光スポット4を1回訪れている)。
この場合、図11のステップS402の処理により、図17に示すように有向二部グラフが編成される。具体的には、図16に示す有向二部グラフに対し、観光客Dの頂点と観光スポット4とを結ぶ辺(矢印)を加算する(図17参照)。また、観光客Dの辺が3つになり、訪問回数は、観光スポット1が2回、観光スポット2および観光スポット4がそれぞれ1回ずつであることから、観光客Dから観光スポット1方向の重みが0.50となり、観光スポット2および観光スポット4方向の重みがそれぞれ0.25となる。そのため、ステップS402の処理では、図16における観光客Dから観光スポット2への辺の太さを0.25の重みに対応した太さへと編成するとともに、観光スポット4への辺の太さを0.25の重みに対応した太さで加算する(図17参照)。
続いて、図11のステップS403の処理、すなわち図12のレコメンド値算出処理において、情報処理装置100は、図17に示すように、レコメンド対象である観光客Dに1.00の値を与え、それぞれの頂点における値1と値2を算出し、観光スポット1~観光スポット4のレコメンド値を算出する(演算の詳細については省略する)。このように、観光客Dが観光スポット1をもう1回訪れたというトランザクションと、観光スポット4を訪れたというトランザクションが発生した場合、観光スポット1~観光スポット4のレコメンド値が、図16に示す値から図17に示す値へと変化する。これにより、図16に示す状態では、観光スポット2のレコメンド値が最も高く、次に観光スポット1のレコメンド値が高かったが、図17に示す状態では、観光スポット1のレコメンド値が最も高く、次に観光スポット4のレコメンド値が高くなり、観光客Dへのレコメンド順位は、観光客Aの行動に近づくようになる。
このように、観光客Dが何らかの行動をとることで、レコメンドされる観光スポットの対象が追加されたり、順位が入れ替わったりして、レコメンド対象の観光客である観光客Dにとってより精度の高い観光スポットがレコメンドされるようになっていく。なお、レコメンド対象者である観光客Dの行動のみに限られず、他の観光客の行動によっても、観光客Dに対しての各観光スポットのレコメンド値が変化する。例えば、図17に示す状態において、観光客Cが観光スポット1を訪れた場合、観光客Dへの各観光スポットのレコメンド値は、図18に示すように変化する。
図17に示す状態において、観光客Cが観光スポット1を訪れたというトランザクションが発生すると、図11のステップS402の処理により、図18に示すように有向二部グラフが編成される。具体的には、図17に示す有向二部グラフに対し、観光客Cの頂点と観光スポット1とを結ぶ辺(矢印)を加算する(図18参照)。この場合、観光客Cの辺が3つになり、訪問回数はそれぞれ、観光スポット1が1回、観光スポット2が4回、観光スポット3が1回であることから、観光客Cから観光スポット1方向の重みが0.17となり、観光スポット2方向の重みが0.67となり、観光スポット3方向の重みがそれぞれ0.17となる。そのため、ステップS402の処理では、図18における観光客Cから観光スポット1への辺の太さを0.17の重みに対応した太さで加算するとともに、観光スポット2への辺の太さを0.67の重みに対応した太さへと編成し、観光スポット3への辺の太さを0.17の重みに対応した太さへと編成する(図18参照)。
続いて、図11のステップS403の処理、すなわち図12のレコメンド値算出処理において、情報処理装置100は、図18に示すように、レコメンド対象である観光客Dに1.00の値を与え、それぞれの頂点における値1と値2を算出し、観光スポット1~観光スポット4のレコメンド値を算出する(演算の詳細については省略する)。ここで、観光客Cが新たに観光スポット1を訪れたことから、観光スポット1から観光客A方向の重みが0.67(観光客Aは2回観光スポット1を訪問)となり、観光スポット1から観光客C方向の重みが0.33(観光客Cは2回観光スポット1を訪問)となる。そのため、観光客Dは、観光客Cの行動にも影響を受けることとなる。したがって、図17に示す状態では、観光スポット4のレコメンド値は観光スポット2のレコメンド値よりも大きかったが、図18に示す状態では、観光スポット2のレコメンド値の方が観光スポット4のレコメンド値よりも大きくなり、レコメンド値の順位として、観光スポット2が観光スポット4と入れ替わることなる。
このように、レコメンド対象者である観光客Dの行動のみに限られず、他の観光客の行動によっても、観光客Dに対しての各観光スポットのレコメンド値が変化する。したがって、レコメンド対象者およびその他の者の行動を示すトランザクションデータを取り込むことで、好適なデータ分析が可能となり、より適格なレコメンドを行うことができる。また、新たに発生したトランザクションデータを追加(加算)することでレコメンドに用いる有向二部グラフを最新化することができ、処理負担を軽減することができる。また、例えば「1年前の本日のトランザクションデータ」を当該有向二部グラフから削除(減算)することで過去分を容易に対象外とすることができる。さらに、それぞれの行動履歴を示すトランザクションデータと重み付けとの関係からレコメンド結果が導き出されているため、レコメンド結果に対する論理的な説明が可能となる。
(変形例)
なお、この発明は、上記実施の形態に限定されず、様々な変形及び応用が可能である。例えば、情報処理装置100では、上記実施の形態で示した全ての技術的特徴を備えるものでなくてもよく、従来技術における少なくとも1つの課題を解決できるように、上記実施の形態で説明した一部の構成を備えたものであってもよい。また、下記の変形例それぞれについて、少なくとも一部を組み合わせてもよい。
上記実施の形態では、観光客と観光先(観光スポット)との間で生じた事象をトランザクションデータとしてハッシュチェーンで連結されたデータブロックに格納し、当該トランザクションデータを用いてレコメンドする例を示しているが、これは一例である。トランザクションとして表現可能なものであれば、観光客と観光先(観光スポット)との間で生じた事象に限られない。例えば、顧客と店舗との間で発生した事象(来店回数や購入金額など)をトランザクションデータとしてハッシュチェーンで連結されたデータブロックに格納し、当該トランザクションデータを用いて顧客に対しおすすめの商品や店舗をレコメンドするようにしてもよい。
また、上記実施の形態では、図8のステップS301の処理において、ユーザの入力操作により対象の期間(開始時間と終了時間)が指定されているか否かを判定し、ユーザの指定した期間内のトランザクションデータに基づいて観光スポットをレコメンドする例を示したが、これは一例である。ステップS301では、対象の期間が指定されているか否かではなく、例えば、「天気が悪い日」や「平均気温が一定以上となった日のみ」、「昼の時間帯」といった条件が指定されているか否かを判定するようにしてもよい。これによれば、指定期間のみならず、一定の条件下におけるレコメンドを好適に行うことができる。また、例えば、「天気が悪く、平均気温が一定以下となった日の昼の時間帯」といった条件を指定してレコメンド結果(その条件によって出力されるおすすめの観光スポット)を得た後、全てのトランザクションデータに基づくレコメンド結果と比較して、当該条件下における傾向を分析してもよい。
また、上記実施の形態では、観光客Dが観光スポット2を訪れたというトランザクションが追加された場合におけるレコメンド処理について説明したが、例えば、図10に示す状態(何ら新たなトランザクションが発生していない場合)においても図11に示すレコメンド処理が実行されてもよい。この場合には、ステップS401およびステップS402の処理を実行せずに、ステップS403の処理において、レコメンド対象者の観光客に値1.00を与え、図12に示すレコメンド値算出処理を実行すればよい。
また、上記実施の形態では、レコメンド対象者である観光客について、図12に示すレコメンド値算出処理のステップS501にて1.00の値を与える例を示したが、この他にも、例えば、図19に示すように、「性別」などの属性について値を与えることで、属性毎に傾向をさらに分析することができる。例えば、「男性が好む観光スポットはどこか」という傾向を調べる場合、図19に示すように、「男性」の属性に1.00を与える。なお、当該属性(属性情報)については、観光客Aおよび観光客Dの種別のハッシュチェーンにおけるインデックス値が「0」のデータブロックに「男性」の属性が登録されているものとする。また、観光スポット2および観光スポット3の種別のハッシュチェーンにおけるインデックス値が「0」のデータブロックに「グルメ」の属性の観光スポットが、観光スポット1および観光スポット4の種別のハッシュチェーンにおけるインデックス値が「0」のデータブロックに「文化施設」の属性の観光スポットが、それぞれ属性情報として登録されているものとする。また、図8に示すグラフ生成処理において、図19に示すように、当該属性を含む有向二部グラフが生成されているものとする。なお、当該属性情報は、インデックス値が「0」のデータブロックに限られず、全てのインデックス値のデータブロックに登録されていてもよい。
そして、上記実施の形態と同様に(図12に示すレコメンド値算出処理と同様に)それぞれの値に重みを乗じて、図19に示す値aと値bとを算出する。具体的には、男性の属性に結ばれた観光客は観光客Aと観光客Dの2人であることから、0.50ずつ分配する。そして、観光客Aと結ばれた観光スポットは観光スポット1と観光スポット4であり、観光スポット1側の重みは0.67である。そのため、観光客Aに分配された0.50に重み0.67を乗じて0.335を得る。一方、観光スポット4側の重みは0.33であることから、当該0.5に重み0.33を乗じて0.165を得る。次に、観光客Dと結ばれた観光スポットは観光スポット1、観光スポット2、および観光スポット4であり、観光スポット1側の重みは0.5である。そのため、観光客Dに分配された0.50に重み0.5を乗じて0.25を得る。また、観光スポット2および観光スポット4の重みはそれぞれ0.25であることから、当該0.5に重み0.25を乗じて0.125をそれぞれ得る。なお、観光スポット2については観光客Aが訪れていないことから、観光スポット2の値aを0.13とする。
そして、観光客Aから観光スポット1への算出値0.335と、観光客Dから観光スポット1への算出値0.25を加算し、観光スポット1の値aとして0.59を得る。また、観光客Aから観光スポット4への算出値0.165と、観光客Dから観光スポット4への算出値0.125を加算し、観光スポット4の値aとして0.29を得る。続いて、観光スポット1と観光スポット4はそれぞれ「文化施設」の属性であることから、それぞれの値aを加算し、「文化施設」の属性の値bとして0.88を得る。また、観光スポット2は「グルメ」の属性であることから、値aをそのまま値bとして(今回観光スポット3には値aは算出されていないため)、0.13を得る。なお、当該値bは上記実施の形態におけるレコメンド値と同様である。したがって、「文化施設」の属性の値bの方が「グルメ」の属性の値bよりも高いため、「男性」は「グルメ」よりも「文化施設」を好む傾向にある、ということがわかる。これによれば、例えば、観光客Dが「男性」である場合には「文化施設」の属性に属する観光スポットを全ておすすめするなど、上記実施の形態におけるレコメンド値に基づく観光スポットに限らず、属性ベースのレコメンド(属性情報に基づくレコメンド)を合わせて行うこともできる(すなわち、上記実施の形態におけるレコメンド値に基づく観光スポットと、属性情報に基づいてレコメンドされる観光スポットとの両方をそれぞれユーザにとって識別可能に表示する)。
このように、各種別のハッシュチェーンについて、属性の情報を持たせ、それを含めた有向二部グラフを生成することで、属性レベルの傾向を分析することができる。なお、この例では、理解を容易にするため「性別」の属性のみを用いたが、例えば、「性別」と「国籍(日本人と外国人)」など、属性は複数用いられてもよい。これによれば、「日本人の男性が好む観光スポットはどこか」や、「外国人の女性が好む観光スポットはどこか」など、より細かい属性毎の傾向を分析することができる。また、この例では、「性別」の属性から観光スポットの属性の方向(上流から下流ともいう)へ値を算出していく例を示したが、逆方向で同様の算出を行うことにより、例えば、「文化施設を好む観光客」を抽出することが可能となる。そして、当該抽出した観光客が訪れた観光スポットを調べ(行動履歴を調べ)、見込み客となる場合(例えばまだ訪問していない観光客である場合)には案内メールを送信するといったことも実現可能となる。
また、属性情報を持つハッシュチェーンが十分に存在すれば、対象となる観光客とよく似た行動をしている観光客の属性を用いて、当該対象となる観光客の属性を推計することができる。例えば、図20に示すように、観光客Aが男性であり、観光客Bおよび観光客Cが女性である場合(それぞれの種別のハッシュチェーンのインデックス値「0」のデータブロックにそれぞれの属性情報が登録されている場合)、値2を用いることで、観光客Dの属性を推計することができる。なお、図20に示す値2は、図17に示す値2と同様である。
具体的には、観光客Dに値1.00を与えた場合に算出される値2は、観光客Aの値2が0.75で最も大きくなる(すなわち、観光客Dに最も似た行動をしている観光客は観光客Aである)。そのため、観光客Aの属性の男性の属性の値Xは0.75となる。一方、観光客Bの値2は0.05、観光客Cの値2は0.20となり、これらは女性の属性に属しているため、女性の属性の値Xは、これらを加算した0.25となる。これにより、観光客Dが男性である確率は75%(女性である確率は25%)と推計することができる。
このように、属性情報を持つハッシュチェーンが十分に存在すれば、対象となる観光客とよく似た行動をしている観光客の属性を用いて、当該対象となる観光客の属性を推計することができる。ただし、属性情報を持つハッシュチェーンが十分に存在しない場合などは、この推計の精度が落ちてしまう。このように推計の精度が低くなる場合には、属性情報に基づくレコメンドの精度も低くなる。そのため、このような場合、属性情報をプログラムで管理しても有効活用することが難しい。そこで、属性情報の有効性を評価し、評価スコアが「0」に近く、予め設定した閾値を下回った場合には、当該属性情報に基づくレコメンドは有効ではないものとして、上記実施の形態におけるレコメンド値に基づく観光スポットのレコメンドのみ表示し、属性情報に基づいてレコメンドされる観光スポットについては表示しないようにしてもよい。以下、評価スコアの算出について説明する。
なお、以下の例では、ハッシュチェーンに登録された観光客の性別の比率を男性:女性=1:1(男性2人、女性2人)とする。例えば、調べたい観光客の属性が「男性」で、その観光客に近い他の観光客の性別が「男性の確率=0.75」、「女性の確率=0.25」であった場合、男性であることの期待値は「1/(1+1)=0.50」であるから、0.75-0.50=0.25を評価スコアとする。その一方で、調べたい観光客の属性が「女性」であった場合、0.25-0.50=-0.25の評価スコアとなる。図20に示す状態において、観光客Dが男性の属性である場合、観光客Dの評価スコアは0.25となる。このような評価スコアを観光客Dだけでなく、観光客A~Cについても算出する。
図20に示す状態において、観光客Aに最も近いのは、観光客Dであるため、観光客Aに値1.00を与えた場合、観光客Dの値2は1.00となる。観光客Aも観光客Dも男性の属性であることから、観光客Aの評価スコアは1.00-0.50=0.50となる。また、観光客Bに最も近いのは観光客Cであるため(観光スポット2から観光客Cへの重みは0.8で、観光客Dへの重みは0.2)、観光客Bに値1.00を与えた場合、観光客Cの値2は0.8となる。観光客Bも観光客Cも女性の属性であることから、観光客Bの評価スコアは0.80-0.50=0.30となる。また、観光客Cに最も近いのは観光客Bおよび観光客Dであるため(観光客Cから観光スポット2と観光スポット3につながっているが、観光スポット3がつながっているのは観光客Cのみのため除外する。そして観光スポット2のつながっている先から観光客Cを除外する。この処理を行った後の観光スポット2から観光客Bへの重みは0.5で、観光客Dへの重みは0.5)、観光客Cに値1.00を与えた場合、観光客Bの値2および観光客Dの値2はそれぞれ0.5となる。観光客Cも観光客Bも女性の属性であることから、観光客B側を基準とした観光客Cの評価スコアは0.50-0.50=0.00となる。また、観光客Cは女性の属性であり、観光客Dは男性の属性であることから、観光客D側を基準とした観光客Cの評価スコアは、0.50-0.50=0.00となる。
そして、観光客A~観光客Dのそれぞれの評価スコアの合計は、0.50+0.30+0.00+0.25=1.05となり、その平均値は、0.26となり、それを属性の評価スコアとする(なお、評価スコアの最大値は0.50である)。ここで、予め定められている閾値が0.25である場合、0.26>閾値となるため、「性別」の属性に基づくレコメンドは有効であると判断すればよい。
その一方で、図21に示す状態では、日本人と外国人の比率は、3:1(日本人3人、外国人1人)である。そのため日本人であることの期待値は0.75、外国人であることの期待値は0.25となる。観光客Dに値1.00を与えた場合、観光客Aの値2は0.75、観光客Cの値2が0.20、いずれも日本人であることから、観光客Dの評価スコアは、0.75+0.20-0.75=0.20となる。同様に、観光客Aに値1.00を与えた場合、観光客Aの評価スコアは1.00-0.75=0.25となる。また、観光客Bに最も近いのは観光客Cであるため、観光客Bに値1.00を与えた場合、観光客Cの値2は0.80となり、観光客Dの値2は0.20となる。観光客Bは「外国人」の属性であり、観光客Cと観光客Dは「日本人」の属性であることから、観光客Bの評価スコアは、0.20+0.80-0.25=0.75となる。また、観光客Cに最も近いのは観光客Bおよび観光客Dであるため、観光客Cに値1.00を与えた場合、観光客Bの値2および観光客Dの値2はそれぞれ0.5となる。観光客Bは「外国人」の属性であり、観光客Cと観光客Dは「日本人」の属性であることから、観光客Cの評価スコアは、0.50-0.75=-0.25となる。
観光客A~観光客Dのそれぞれの評価スコアの合計は、0.20+0.25-0.75-0.25=-0.55となり、その平均値(属性の評価スコア)は、-0.14となる。ここで、予め定められている閾値が0.20である場合、-0.14<閾値となるため、「国籍」の属性に基づくレコメンドは無効であると判断すればよい。このような場合、属性情報に基づいてレコメンドされる観光スポットについては表示しないようにすればよい。なお、閾値については、属性毎に任意に設定可能であればよい。例えば、ユーザの年齢や性別、国籍の他、トランザクションの種類に応じて任意の値を設定可能であればよい(具体的には、観光客と観光スポットとで発生したトランザクションと、顧客と店舗とで発生したトランザクションとでは異なる閾値にするなど)。
また、上記実施の形態におけるレコメンド処理に加え、例えば、トランザクションデータの順序性に着目することで、さらなる分析が可能となる。具体的に、観光スポット2を訪れた観光客は、次に観光スポット1を訪れる可能性が高いといったことや、観光スポット1から観光スポット2といった順に訪問する観光客は少ないといったこと、さらに、観光スポット1を訪れた後は観光スポットdが多い、などといった分析が可能となる。
例えば、図22に示すように、観光スポット2に着目し、観光スポット2と結ばれた観光客のトランザクションデータ(観光客B~観光客D)を抽出する。これにより、抽出した観光客のハッシュチェーンに連なる一連のトランザクションデータに「観光スポット2」が含まれ、その前後のトランザクションデータが何であるか、およびその時間間隔がいかほどであるか、を分析することが可能となる。なお、図21に示す例では、説明を簡略化するため、観光客Cの種別のハッシュチェーンに登録されたトランザクションデータを、図6に示す順とは異なるものとしており(図7とは異なるものとしており)、観光客Cは、観光スポット2、観光スポット3、観光スポット2、観光スポット1の順で訪問したものとしている。
そして、抽出したトランザクションデータについて、着目した「観光スポット2」を基準として、その前後のトランザクションデータを、図23に示すように配列する。これにより、着目したトランザクションデータの前後のトランザクションが何であるか、すなわち頻度が高いトランザクションデータの種類を特定することができる。図示する例では、観光スポット2の箱の上に観光スポット1が配列された数が多いことから、着目した「観光スポット2」の訪問客は、次に「観光スポット1」を訪れる可能性が高いことがわかる。
なお、例えば、観光スポット2を訪れた後、一定期間(任意に設定可能な期間であればよい)経過した場合には、前後のトランザクションを配列しないようにしてもよい。例えば、図23に示す例において、観光客Cの種別のハッシュチェーンに連結されていた観光スポット1を訪れたことを示すトランザクションデータが、観光スポット2を訪れてから1年以上経過している場合には、当該観光スポット1を訪れたことを示す内容のトランザクションデータ(図示する例では観光スポット1の箱)を配列しないようにしてもよい。この場合、一定期間経過しているか否かを判定し、経過していない場合にのみ配列するようにすればよい。
また、これを応用し、「観光スポット2」を訪れた観光客の平均滞在時間を求め、観光スポット2に訪問した観光客に対して、平均滞在時間が経過した時点で「観光スポット1に訪問してはいかがですか」とプッシュ通知によりレコメンドするといった活用が可能になる。その際、時間を参照して、例えば、観光スポット1の営業時間外など「訪問データがない時間帯」であった場合には、観光スポット1に代えて観光スポット4をレコメンドするようにしてもよい。なお、平均滞在時間は、例えば、「観光スポット2」を訪れたそれぞれの観光客のハッシュチェーンについて、「観光スポット2」が登録されたデータブロックと、その次に訪れた観光スポットが登録されたデータブロックとのそれぞれのタイムスタンプの差の平均値により算出すればよい。
また、これを応用し、例えば、「観光スポットxの情報を閲覧」、「観光スポットxの旅行商品yの情報を閲覧」、「旅行商品yの申し込み(購入)」といったトランザクションデータの順序性を分析し、かつそれらのトランザクションデータの時間間隔に基づく分析により、例えば、「観光スポットxの旅行商品yの情報を閲覧」といったトランザクションの発生から10分以内に申し込みが行われない場合には申し込みの確率が非常に低くなるといった分析を行い、レコメンドの優先順位を入れ替えるなどといった活用が可能となる(「観光スポットxの旅行商品yの情報を閲覧」のトランザクションが発生した場合には、「旅行商品yの申し込み(購入)」といった特定のレコメンドを優先させるなど)。
なお、上述の機能を、OS(Operating System)とアプリケーションとの分担、またはOSとアプリケーションとの協同により実現する場合等には、OS以外の部分のみを媒体に格納してもよい。
また、搬送波にプログラムを重畳し、通信ネットワークを介して配信することも可能である。例えば、通信ネットワーク上の掲示板(BBS、Bulletin Board System)に当該プログラムを掲示し、ネットワークを介して当該プログラムを配信してもよい。そして、これらのプログラムを起動し、オペレーティングシステムの制御下で、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行できるように構成してもよい。