(57)【要約】【課題】ブロック上に格納されたトランザクションデータを好適に分析する。【解決手段】情報処理装置は、トランザクションが発生したことに基づいて、ネットワーク内に構築されるハッシュチェーンで連結されるデータブロックに、トランザクションのデータを格納する。そして、格納されたトランザクションのデータのうち、所定のトランザクションのデータを抽出し、抽出したトランザクションのデータにより特定される取引対象のうちの特定の取引対象を推薦対象者とし、推薦対象者に関連する全ての取引対象について、トランザクションのデータに基づき予め定められた演算を行う。そして演算結果に応じて、推薦対象者の好みに対応する対象を推薦する。【選択図】図１４
2020149120.tif 000002
【特許請求の範囲】
【請求項１】
トランザクションが発生したことに基づいて、ネットワーク内に構築されるハッシュチェーンで連結されるデータブロックに、前記トランザクションのデータを格納するデータ格納手段と、
前記データ格納手段に格納された前記トランザクションのデータのうち、所定の前記トランザクションのデータを抽出する抽出手段と、
前記抽出手段で抽出した前記トランザクションのデータに基づいて、予め定められた演算を行う演算手段と、
前記演算手段による演算結果に応じて、推薦対象者の好みに対応する対象を推薦する推薦手段と、を備え、
前記トランザクションのデータには、前記トランザクションの取引対象を特定する情報が含まれ、
前記演算手段は、前記抽出手段で抽出した前記トランザクションのデータにより特定される前記取引対象のうちの特定の前記取引対象を前記推薦対象者とし、前記推薦対象者に関連する全ての前記取引対象について、前記トランザクションのデータに基づき前記予め定められた演算を行う、
ことを特徴とする情報処理装置。
【請求項２】
前記抽出手段は、前記データ格納手段に前記トランザクションのデータが新たに格納された場合、該トランザクションのデータを新たに抽出し、
前記演算手段は、前記抽出手段で新たに抽出した前記トランザクションのデータにより特定される前記取引対象を前記推薦対象者とし、前記推薦対象者に関連する全ての前記取引対象について、前記トランザクションのデータに基づき前記予め定められた演算を行うことで、前記演算手段により既に行われた演算結果を更新する、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記演算手段は、前記予め定められた演算として、前記推薦対象者に初期値を割り振り、前記推薦対象者に関連する全ての前記取引対象について、前記初期値を基準に、前記トランザクションのデータにより算出される重みを乗じた値を算出する、
ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記トランザクションのデータには、前記トランザクションの取引対象の属性を示す属性情報がさらに含まれ、
前記演算手段は、前記推薦対象者の前記属性情報により示される属性に前記初期値をさらに割り振り、前記推薦対象者と同じ属性の前記取引対象に関連する全ての前記取引対象について、前記初期値を基準に、前記トランザクションのデータにより算出される重みを乗じた値をさらに算出し、
前記推薦手段は、前記演算手段による演算結果に応じて、前記推薦対象者の好みに対応する対象に加え、前記推薦対象者の属性の好みに対応する対象を推薦する、
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
情報処理装置における情報処理方法であって、
トランザクションが発生したことに基づいて、ネットワーク内に構築されるハッシュチェーンで連結されるデータブロックに、前記トランザクションのデータを格納するデータ格納ステップと、
前記データ格納ステップで格納された前記トランザクションのデータのうち、所定の前記トランザクションのデータを抽出する抽出ステップと、
前記抽出ステップで抽出した前記トランザクションのデータに基づいて、予め定められた演算を行う演算ステップと、
前記演算ステップによる演算結果に応じて、推薦対象者の好みに対応する対象を推薦する推薦ステップと、を備え、
前記トランザクションのデータには、前記トランザクションの取引対象を特定する情報が含まれ、
前記演算ステップでは、前記抽出ステップで抽出した前記トランザクションのデータにより特定される前記取引対象のうちの特定の前記取引対象を前記推薦対象者とし、前記推薦対象者に関連する全ての前記取引対象について、前記トランザクションのデータに基づき前記予め定められた演算を行う、
ことを特徴とする情報処理方法。
【請求項６】
コンピュータを、
トランザクションが発生したことに基づいて、ネットワーク内に構築されるハッシュチェーンで連結されるデータブロックに、前記トランザクションのデータを格納するデータ格納手段、
前記データ格納手段に格納された前記トランザクションのデータのうち、所定の前記トランザクションのデータを抽出する抽出手段、
前記抽出手段で抽出した前記トランザクションのデータに基づいて、予め定められた演算を行う演算手段、
前記演算手段による演算結果に応じて、推薦対象者の好みに対応する対象を推薦する推薦手段、として機能させ、
前記トランザクションのデータには、前記トランザクションの取引対象を特定する情報が含まれ、
前記演算手段は、前記抽出手段で抽出した前記トランザクションのデータにより特定される前記取引対象のうちの特定の前記取引対象を前記推薦対象者とし、前記推薦対象者に関連する全ての前記取引対象について、前記トランザクションのデータに基づき前記予め定められた演算を行う、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
近年、ビットコイン（登録商標）等の仮想通貨を用いた商取引が行われている。当該仮想通貨を用いた商取引では、中央集権的な管理を必要とせずに不正を防止するため、ブロックチェーンと呼ばれる技術が用いられている。ブロックチェーンでは、複数のトランザクションデータ、直前のハッシュ値及びその他の情報を「ブロック」として定義し、参加者全体で形成されるネットワーク内での合意形成のプロセスによって当該「ブロック」内の情報の信頼性を担保している。しかしながら、このようなブロックチェーンの技術により仮想通貨の商取引を行う場合、１秒あたりに処理可能な件数が少ないといった問題がある。
【０００３】
このような問題に対応するため、例えば非特許文献１には、ハッシュグラフと呼ばれる技術が開示されている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】”ブロックチェーンを超える技術が存在！分散型台帳「Hashgraph」とは？”、［Online］、［平成30年9月3日検索］、インターネット<URL：https://coin-otaku.com/topic/7754>
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献１に開示されているハッシュグラフの技術では、ランダムに選ばれた一部のユーザの承認によりトランザクションデータの記録を行うことから、ブロックチェーンの技術を用いた処理よりも高速な処理を実現可能となる。しかしながら、複数のトランザクションデータを時系列に格納したブロックを複数つないでいく点ではいずれの技術も共通であり、ブロック上に格納したトランザクションデータを好適に分析するという面からすると未だ十分ではなかった。
【０００６】
本発明は、上述のような事情に鑑みてなされたものであり、ブロック上に格納されたトランザクションデータを好適に分析することができる情報処理装置、情報処理方法およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の第１の観点に係る情報処理装置は、
トランザクションが発生したことに基づいて、ネットワーク内に構築されるハッシュチェーンで連結されるデータブロックに、前記トランザクションのデータを格納するデータ格納手段と、
前記データ格納手段に格納された前記トランザクションのデータのうち、所定の前記トランザクションのデータを抽出する抽出手段と、
前記抽出手段で抽出した前記トランザクションのデータに基づいて、予め定められた演算を行う演算手段と、
前記演算手段による演算結果に応じて、推薦対象者の好みに対応する対象を推薦する推薦手段と、を備え、
前記トランザクションのデータには、前記トランザクションの取引対象を特定する情報が含まれ、
前記演算手段は、前記抽出手段で抽出した前記トランザクションのデータにより特定される前記取引対象のうちの特定の前記取引対象を前記推薦対象者とし、前記推薦対象者に関連する全ての前記取引対象について、前記トランザクションのデータに基づき前記予め定められた演算を行う、
ことを特徴とする。
【０００８】
前記抽出手段は、前記データ格納手段に前記トランザクションのデータが新たに格納された場合、該トランザクションのデータを新たに抽出し、
前記演算手段は、前記抽出手段で新たに抽出した前記トランザクションのデータにより特定される前記取引対象を前記推薦対象者とし、前記推薦対象者に関連する全ての前記取引対象について、前記トランザクションのデータに基づき前記予め定められた演算を行うことで、前記演算手段により既に行われた演算結果を更新する、
ようにしてもよい。
【０００９】
前記演算手段は、前記予め定められた演算として、前記推薦対象者に初期値を割り振り、前記推薦対象者に関連する全ての前記取引対象について、前記初期値を基準に、前記トランザクションのデータにより算出される重みを乗じた値を算出する、
ようにしてもよい。
【００１０】
前記トランザクションのデータには、前記トランザクションの取引対象の属性を示す属性情報がさらに含まれ、
前記演算手段は、前記推薦対象者の前記属性情報により示される属性に前記初期値をさらに割り振り、前記推薦対象者と同じ属性の前記取引対象に関連する全ての前記取引対象について、前記初期値を基準に、前記トランザクションのデータにより算出される重みを乗じた値をさらに算出し、
前記推薦手段は、前記演算手段による演算結果に応じて、前記推薦対象者の好みに対応する対象に加え、前記推薦対象者の属性の好みに対応する対象を推薦する、
ようにしてもよい。
【００１１】
上記目的を達成するため、本発明の第２の観点に係る情報処理方法は、
情報処理装置における情報処理方法であって、
トランザクションが発生したことに基づいて、ネットワーク内に構築されるハッシュチェーンで連結されるデータブロックに、前記トランザクションのデータを格納するデータ格納ステップと、
前記データ格納ステップで格納された前記トランザクションのデータのうち、所定の前記トランザクションのデータを抽出する抽出ステップと、
前記抽出ステップで抽出した前記トランザクションのデータに基づいて、予め定められた演算を行う演算ステップと、
前記演算ステップによる演算結果に応じて、推薦対象者の好みに対応する対象を推薦する推薦ステップと、を備え、
前記トランザクションのデータには、前記トランザクションの取引対象を特定する情報が含まれ、
前記演算ステップでは、前記抽出ステップで抽出した前記トランザクションのデータにより特定される前記取引対象のうちの特定の前記取引対象を前記推薦対象者とし、前記推薦対象者に関連する全ての前記取引対象について、前記トランザクションのデータに基づき前記予め定められた演算を行う、
ことを特徴とする。
【００１２】
上記目的を達成するため、本発明の第３の観点に係るプログラムは、
コンピュータを、
トランザクションが発生したことに基づいて、ネットワーク内に構築されるハッシュチェーンで連結されるデータブロックに、前記トランザクションのデータを格納するデータ格納手段、
前記データ格納手段に格納された前記トランザクションのデータのうち、所定の前記トランザクションのデータを抽出する抽出手段、
前記抽出手段で抽出した前記トランザクションのデータに基づいて、予め定められた演算を行う演算手段、
前記演算手段による演算結果に応じて、推薦対象者の好みに対応する対象を推薦する推薦手段、として機能させ、
前記トランザクションのデータには、前記トランザクションの取引対象を特定する情報が含まれ、
前記演算手段は、前記抽出手段で抽出した前記トランザクションのデータにより特定される前記取引対象のうちの特定の前記取引対象を前記推薦対象者とし、前記推薦対象者に関連する全ての前記取引対象について、前記トランザクションのデータに基づき前記予め定められた演算を行う、
ことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、ブロック上に格納されたトランザクションデータを好適に分析することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態に係る情報処理システムの一例を示すブロック図である。
【図２】本発明の実施形態に係る情報処理装置の一例を示すブロック図である。
【図３】初期登録処理の一例を示すフローチャートである。
【図４】データブロック登録処理の一例を示すフローチャートである。
【図５】ハッシュチェーンの構成例を示す図である。
【図６】発生したトランザクションの一例を示す図である。
【図７】ハッシュチェーンの登録内容の例を示す図である。
【図８】グラフ生成処理の一例を示すフローチャートである。
【図９】重みの算出例を説明するための説明図である。
【図１０】グラフ生成処理により生成される有向二部グラフの一例を示す図である。
【図１１】レコメンド処理の一例を示すフローチャートである。
【図１２】レコメンド値算出処理の一例を示すフローチャートである。
【図１３】レコメンド値を算出する場合における説明図である。
【図１４】レコメンド値を算出する場合における説明図である。
【図１５】レコメンド値を算出する場合における説明図である。
【図１６】レコメンド値を算出する場合における説明図である。
【図１７】レコメンド値を算出する場合における説明図である。
【図１８】レコメンド値の変化を説明するための説明図である。
【図１９】属性毎の傾向を分析する場合における説明図である。
【図２０】属性を推計する場合における説明図である。
【図２１】属性情報に基づくレコメンドの有効性について説明するための説明図である。
【図２２】トランザクションデータの順序性に着目した場合における説明図である。
【図２３】トランザクションデータの順序性に着目した場合における説明図である。
【発明を実施するための形態】
【００１５】
本発明における情報処理装置１００を、図１に示す情報処理システム１に適用した例を用いて説明する。情報処理システム１では、図１に示すように、情報処理装置１００Ａ〜１００Ｃ（情報処理装置１００Ａ〜１００Ｃを単に情報処理装置１００ともいう）、観光客Ａ〜Ｄの端末１００Ｄのそれぞれがネットワーク２１０を介して通信可能に接続されている。なお、観光客Ａ〜Ｄの端末１００Ｄは、それぞれ単体で情報処理装置１００としても機能することが可能であるが、理解を容易にするため、この実施の形態では、これらを情報処理装置１００と区別して説明する。
【００１６】
情報処理装置１００は、携帯電話やスマートフォン、タブレットやＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等の情報端末（所謂コンピュータ）であり、Ｐ２Ｐ（Ｐｅｅｒ  ｔｏ  Ｐｅｅｒ）等の分散型のネットワーク２１０を構築している。なお、情報処理システム１は、Ｐ２Ｐ型のシステムに限られず、例えばクラウドコンピューティング型であってもよい。
【００１７】
情報処理装置１００は、例えば、観光客Ｃが観光スポット２を訪れた、などといった、観光客と観光先（観光スポット）との間で発生した事象を示すデータ（トランザクションデータ）をネットワーク２１０から受信したことに基づいて、新たなデータブロックを生成して当該受信データを格納し、既存のハッシュチェーンに連結する、ハッシュチェーン登録装置として機能する。なお、上述したように、観光客Ａ〜Ｄの端末１００Ｄが情報処理装置１００として機能することもあることから、情報処理装置１００は、トランザクションデータを生成し、ネットワーク２１０へ配信する機能を有するトランザクション生成装置として機能することもある。ハッシュチェーン登録装置にて登録された内容は、ネットワーク２１０を介して、各情報処理装置１００で共有される。また、通常、一定数のトランザクションデータが一つのデータブロックに格納される（一定数のトランザクションデータをひとまとめにして一つのブロックに格納する）が、この実施の形態では、理解を容易にするため、一つのトランザクションデータが一つのデータブロックに格納されるものとする。
【００１８】
この実施の形態において、観光客と観光スポットとの間で発生した事象により生成された（端末Ｄがトランザクション生成装置として機能して生成された）トランザクションデータは、データブロックと呼ばれる一つの単位に格納され、当該データブロックを時系列に連結したそれぞれの種別のハッシュチェーンによって管理される。例えば、観光客Ｃが観光スポット２を訪れた、といった事象のトランザクションデータは、観光客Ｃの種別のハッシュチェーンおよび観光スポット２の種別のハッシュチェーンとに、それぞれ新たなデータブロックとして同内容のデータが登録されて管理される。
【００１９】
また、この実施の形態における情報処理装置１００は、各種別のハッシュチェーンに含まれるデータブロックから、ユーザにより指定された登録データを対象として、対象となる観光客に対し、おすすめの観光スポットを提示するレコメンド装置としても機能する。
【００２０】
この実施の形態における情報処理装置１００のレコメンド装置としての機能は、詳しくは後述するが、複数登録されたデータブロックから、ユーザにより指定されたトランザクションデータを抽出して所定の演算を行うとともに有向二部グラフを生成してレコメンド値を算出することにより、対象となる観光客に対し、おすすめの観光スポットを提示する。
【００２１】
次に、図２を参照し、この実施の形態における情報処理装置１００の構成について説明する。なお、図示する例では、情報処理装置１００Ａを例としているが、情報処理装置１００Ｂおよび１００Ｃ、端末１００Ｄが情報処理装置１００として機能する場合についても同様であるため、説明は省略する。なお、図示は省略しているが、トランザクション生成装置としての機能を有する機能部が設けられていてもよい。
【００２２】
図２に示すように、情報処理装置１００Ａ（以下、情報処理装置１００）は、記憶部１１０と、制御部１２０と、入出力部１３０と、通信部１４０と、これらを相互に接続するシステムバス（図示省略）と、を備えている。
【００２３】
記憶部１１０は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ)やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等を備える。ＲＯＭは制御部１２０のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が実行するプログラム及び、プログラムを実行する上で予め必要なデータを記憶する（図示省略）。具体的に、この実施の形態では、当該情報処理装置１００を、ハッシュチェーン登録装置およびレコメンド装置として機能させるためのプログラムが、予めインストールされている。ＲＡＭは、プログラム実行中に作成されたり変更されたりするデータを記憶する。記憶部１１０は、制御部１２０が実行するプログラムが用いる主要な情報として、各種別のハッシュチェーン１１１を記憶する。
【００２４】
各種別のハッシュチェーン１１１は、観光客Ａ〜Ｄ、観光スポット１〜４のそれぞれの種別に対応するハッシュチェーンであり、それぞれのハッシュチェーンは、トランザクションデータが格納されたデータブロックが連結されたものである。各種別のハッシュチェーン１１１は、後述するデータブロック登録処理にて当該記憶部１１０に記憶され、後述するグラフ生成処理やレコメンド処理により参照される。
【００２５】
制御部１２０は、ＣＰＵやＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等から構成される。制御部１２０は、記憶部１１０に記憶されたプログラムに従って動作し、当該プログラムに従った処理を実行する。制御部１２０は、記憶部１１０に記憶されたプログラムにより提供される主要な機能部として、初期登録部１２１と、同期処理部１２２と、データブロック登録部１２３と、データ取得部１２４と、グラフ生成部１２５と、レコメンド処理部１２６と、を備える。
【００２６】
初期登録部１２１は、ユーザの入出力部１３０に対する操作や、通信部１４０を介して受信した要求に基づいて、新たな種別のハッシュチェーンを生成するために必要な初期情報を登録する機能を実現する機能部である。詳しくは後述するが、初期登録部１２１は、例えば、観光客Ｃの種別のハッシュチェーンを生成するために必要な初期情報として、観光客Ｃのアドレス、インデックス値などを登録する機能（すなわち、後述するハッシュチェーンの土台情報を登録する機能）を有している。
【００２７】
同期処理部１２２は、当該情報処理装置１００に記憶された各種別のハッシュチェーンと、他の情報処理装置１００に記憶された各種別のハッシュチェーンとを同期する機能を実現する機能部である。詳しくは後述するが、同期処理部１２２は、後述するデータブロック登録処理にてトランザクションデータを当該情報処理装置１００におけるデータブロックに登録する前と後に、他の情報処理装置１００と同期する機能を有している。また、同期処理部１２２は、後述する初期登録処理において他の情報処理装置１００へ、ハッシュチェーンの土台情報を同期させる機能を有している。
【００２８】
データブロック登録部１２３は、発生したトランザクションのトランザクションデータを含むデータブロックを、当該情報処理装置１００の各種別のハッシュチェーン１１１のうち、対応する種別のハッシュチェーンに追加する機能を実現する機能部である。詳しくは後述するが、データブロック登録部１２３は、例えば、観光客Ｃが観光スポット２を訪れた場合、観光客Ｃと観光スポット２のそれぞれの種別のハッシュチェーンに、当該内容（トランザクションデータ）を、新たなデータブロックとして登録する機能を有している。
【００２９】
データ取得部１２４は、ユーザの指定に基づいて、登録された各種別のハッシュチェーン１１１に含まれるデータブロックに含まれるトランザクションデータを取得する機能を実現する機能部である。
【００３０】
グラフ生成部１２５は、データ取得部１２４により取得したトランザクションデータに基づいて有向二部グラフを生成する機能を実現する機能部である。
【００３１】
レコメンド処理部１２６は、グラフ生成部１２５により生成された有向二部グラフを編成し、レコメンド対象者に対しおすすめの観光スポットを提示する機能を実現する機能部である。
【００３２】
これら各機能部が協働して、当該情報処理装置１００をハッシュチェーン登録装置およびレコメンド装置として機能させる。
【００３３】
入出力部１３０は、キーボード、マウス、カメラ、マイク、液晶ディスプレイ、有機ＥＬ（Ｅｌｅｃｔｒｏ−Ｌｕｍｉｎｅｓｃｅｎｃｅ）ディスプレイ等から構成され、データの入出力を行うための装置である。
【００３４】
通信部１４０は、他の情報処理装置１００や端末Ｃ〜端末Ｇとネットワーク２１０を介して通信を行うためのデバイスである。
【００３５】
以上が、情報処理装置１００の構成である。続いて情報処理装置１００の動作などについて、図３〜図１７を参照して説明する。まず、ハッシュチェーン登録装置として機能した場合における情報処理装置１００の動作について、図３〜７を参照して説明する。
【００３６】
まず、ユーザの入出力部１３０に対する操作（入力操作）や、端末１００Ｄから受信した要求（登録要求）に基づいて、図３に示す初期登録処理が行われる。初期登録処理は、新たな種別のハッシュチェーンを生成するために必要な初期情報を登録する処理である。この例では、理解を容易にするため、観光客Ｃについての初期登録を行う場合について説明する。初期登録処理を開始すると、情報処理装置１００は、初期登録部１２１の機能により、種別データを生成する（ステップＳ１０１）。具体的に、ステップＳ１０１では、入力操作や登録要求に含まれる、種別情報である観光客Ｃの情報および観光客Ｃのアドレスを、観光客Ｃの種別のハッシュチェーンを生成するための情報として、記憶部１１０へ登録する。なお、当該情報は、各種別のハッシュチェーン１１１のうちの種別Ｃのハッシュチェーンとして登録されればよい。また、種別情報は登録せず、アドレスのみ登録するようにしてもよい。なお、この実施の形態では、観光客Ａ〜Ｄのアドレスをそれぞれ０１〜０４、観光スポット１〜４のアドレスをそれぞれＸ１〜Ｘ４としている。
【００３７】
次に、情報処理装置１００は、初期登録部１２１の機能により、登録した観光客Ｃの種別のハッシュチェーンのインデックス値に、初期値である「０」を登録する（ステップＳ１０２）。インデックス値が「０」であることは、当該ハッシュチェーンが初期状態であること（何らデータブロックが登録されていない状態であること）を示している。すなわち、ステップＳ１０１およびステップＳ１０２の処理では、データブロックがチェーンで連結されてはいないものの、データブロックが未登録のハッシュチェーン（ハッシュチェーンの土台情報）が生成されていると言える。なお、この状態では、データブロックがチェーンで連結されていないため、データを削除でき、また、削除したことを検証することができない、といった問題がある。そこで、対改ざん性を高めるため、ランダムで選択したハッシュチェーンに対して特別なトランザクションを発生させ、インデックス値が「０」のデータブロックをチェーンで連結する処理を行うようにしてもよい。
【００３８】
ステップＳ１０２の処理を実行した後、情報処理装置１００は、同期処理部１２２の機能により、他の情報処理装置１００へ、当該内容を登録し（ステップＳ１０３）、初期登録処理を終了する。具体的に、ステップＳ１０３では、当該情報処理装置１００における観光客Ｃの種別のハッシュチェーン（ハッシュチェーンの土台情報）の内容を、他の情報処理装置１００の記憶部１１０における各種別のハッシュチェーン１１１へコピーする。これにより、全ての情報処理装置１００において観光客Ｃの種別のハッシュチェーン（ハッシュチェーンの土台情報）が共有されることとなる。
【００３９】
次に、発生したトランザクションについて、当該トランザクションデータを対応する種別のハッシュチェーンのデータブロックへ登録するデータブロック登録処理について説明する。当該データブロック登録処理は、発生したトランザクションに対応するトランザクションデータを受信することにより実行される。トランザクションデータは、端末１００Ｄにより受信するものであるが、入出力部１３０に入力されてもよい。なお、この実施の形態では、上述したように、一つのトランザクションにつき一つのデータブロックが作成され登録されることから、当該データブロック登録処理は、登録すべきトランザクションの数が複数ある場合、繰り返し実行されることとなる。
【００４０】
図４は、データブロック登録処理の一例を示すフローチャートである。この例では、理解を容易にするため、観光客Ｃが観光スポット２を訪れたというトランザクションが発生した場合のデータブロック登録処理（図５（Ａ）の状態から（Ｂ）の状態へと移行する場合）について説明する。
【００４１】
観光客Ｃが観光スポット２を訪れたというトランザクションが発生すると、これに対応するトランザクションデータが観光客Ｃの端末１００Ｄから送信される。これにより、情報処理装置１００は、データブロック登録部１２３の機能により、データブロック登録処理を開始する。なお、例えば、観光客Ｃの端末１００Ｄと、観光スポット２の端末の両方から同内容のトランザクションデータを受信することをもってデータブロック登録処理を開始するようにしてもよい。この場合、異なる内容のトランザクションデータを受信した場合には、エラーを出力するようにしてもよい。
【００４２】
データブロック登録処理を開始すると、情報処理装置１００は、まず、同期処理部１２２の機能により、当該情報処理装置１００における対象のハッシュチェーンと、他の情報処理装置１００における対象のハッシュチェーンとが、同期しているか否かを判定する（ステップＳ２０１）。具体的に、この例におけるステップＳ２０１の処理では、各種別のハッシュチェーン１１１のうち、観光客Ｃの種別のハッシュチェーンに含まれる最新のデータブロックのインデックス値とハッシュ値、および観光スポット２の種別のハッシュチェーンに含まれる最新のデータブロックのインデックス値とハッシュ値とが、他の全ての情報処理装置１００に記憶されたものと同一であるか否かを判定することで、同期しているか否かを判定する。
【００４３】
図５（Ａ）に示す例を用いて説明すると、当該情報処理装置１００（トランザクションデータを受信した情報処理装置１００のことをいう、以下同様）の各種別のハッシュチェーン１１１のうち、観光客Ｃのハッシュチェーンには、インデックス値「Ｎ−１」のデータブロックが最新のデータブロックとして登録されており、観光スポット２のハッシュチェーンには、インデックス値「Ｚ−１」のデータブロックが最新のデータブロックとして登録されている。なお、図示するように、この実施の形態におけるハッシュチェーンのデータブロック（第ｍのデータブロック）には、登録データ（トランザクションデータ）と、現在のハッシュチェーンの末尾（１つ前）のデータブロック（第ｍ−１のデータブロック）のハッシュ値（２５６ビット）が含まれる点は、従来のブロックチェーンの仕組みと同様である。また、データブロックには、例えば、当該データブロックに登録データが登録された日時を示すタイムスタンプなどの分析用付加データが含まれる（図示省略）点についても、従来のブロックチェーンの仕組みと同様である。
【００４４】
図４のステップＳ２０１の処理では、インデックス値「Ｎ−１」と当該Ｎ−１のハッシュ値、およびインデックス値「Ｚ−１」と当該Ｚ−１のハッシュ値が、他の全ての情報処理装置１００に記憶されているものと一致するか否かを判定することで、同期しているか否かを判定する。例えば、インデックス値「Ｎ」と当該Ｎのハッシュ値が記憶されている情報処理装置１００が存在する場合には、当該情報処理装置１００に記憶されている観光客Ｃの種別のハッシュチェーンの情報が古いと判定する（インデックス値「Ｚ」および当該Ｚのハッシュ値の場合には観光スポット２の種別のハッシュチェーン）。一方、インデックス値「Ｎ−２」と当該Ｎ−２のハッシュ値が記憶されている情報処理装置１００が存在する場合には、その情報処理装置１００に記憶されている観光客Ｃの種別のハッシュチェーンの情報が古いと判定する（インデックス値「Ｚ−２」および当該Ｚ−２のハッシュ値の場合には観光スポット２の種別のハッシュチェーン）。
【００４５】
同期していない場合（ステップＳ２０１；Ｎｏ）、情報処理装置１００は、同期処理部１２２の機能により、最新のハッシュチェーンの内容を、古いと判定したハッシュチェーンが登録されている情報処理装置１００へコピーする同期処理を実行する（ステップＳ２０２）。なお、ステップＳ２０２の処理では、ハッシュチェーン全体をコピーしてもよいし、不足しているデータブロックのみ（インデックス値やハッシュ値も含む）コピーしてもよい。
【００４６】
ステップＳ２０１にて同期していると判定した場合（ステップＳ２０１；Ｙｅｓ）、またはステップＳ２０２の処理を実行した場合、情報処理装置１００は、対象のハッシュチェーンに同一の登録データを格納したデータブロックをそれぞれ追加する（ステップＳ２０３）。なお、上述したように、新たなデータブロック（第ｍのデータブロック）をハッシュチェーンに追加する場合、登録データ（トランザクションデータ）と、現在のハッシュチェーンの末尾（１つ前）のデータブロック（第ｍ−１のデータブロック）のハッシュ値（２５６ビット）をデータブロックに格納し、現在のハッシュチェーンの末尾（１つ前）のデータブロック（第ｍ−１のデータブロック）に連結する点は、従来のブロックチェーンの仕組みと同様である。
【００４７】
具体的に、ステップＳ２０３の処理では、図５（Ｂ）に示すように、観光客Ｃの種別のハッシュチェーンには、インデックス値「Ｎ」のデータブロックがインデックス値「Ｎ−１」のデータブロックに連結されるとともに、観光スポット２の種別のハッシュチェーンには、インデックス値「Ｚ」のデータブロックがインデックス値「Ｚ−１」のデータブロックに連結される。連結されるそれぞれのデータブロックは、同一のトランザクションデータが含まれる。具体的に、観光客Ｃが（Ｆｒｏｍ：０３）観光スポット２を（Ｔｏ：Ｘ２）訪れたことを示す内容が登録される。図示するように、「Ｆｒｏｍ」と「Ｔｏ」により、どの観光客がどの観光スポットを訪れたかが示される。なお、例えば顧客が店舗にて商品を購入したことを示す場合には、価値の大きさを、例えばコインの移動量を示すデータをさらに登録することで示してもよい。なお、観光客Ｃの種別のハッシュチェーンにおけるインデックス値「Ｎ」のデータブロックには、Ｎ−１のハッシュ値が格納され、観光スポット２の種別のハッシュチェーンにおけるインデックス値「Ｚ」のデータブロックには、Ｚ−１のハッシュ値が格納される。このように、この実施の形態における情報処理装置１００は、対応するそれぞれのハッシュチェーンに、同一のトランザクションデータを追加する。
【００４８】
図４に戻り、ステップＳ２０３の処理を実行した後、情報処理装置１００は、同期処理部１２２の機能により、ステップＳ２０３にてデータブロックを追加した種別のハッシュチェーンを他の情報処理装置１００へ登録することにより、当該情報処理装置１００と他の情報処理装置１００とを同期してから（ステップＳ２０４）、データブロック登録処理を終了する。なお、ステップＳ２０４の処理では、当該情報処理装置１００における観光客Ｃおよび観光スポット２の種別のハッシュチェーンそれぞれの内容を、他の情報処理装置１００の記憶部１１０における各種別のハッシュチェーン１１１へコピーする。なお、ステップＳ２０５の処理では、ステップＳ２０２の処理と同様に、ハッシュチェーン全体をコピーしてもよいし、不足しているデータブロックのみ（インデックス値やハッシュ値も含む）コピーしてもよい。
【００４９】
このように、トランザクションが発生する度に、図４に示すデータブロック登録処理が行われ、トランザクションデータが対象のハッシュチェーンに登録されることとなる。例えば、図６（Ａ）に示すように９個のトランザクションが発生した場合（図６（Ｂ）に示す場合には１０個）には、図４に示すデータブロック登録処理が９回（図６（Ｂ）に示す場合には１０回）行われ、対象となる種別のハッシュチェーンにそれぞれのトランザクションデータが登録されることとなる。図７は、図６（Ａ）に示す９個のトランザクションについて図４に示すデータブロック登録処理が９回行われた場合におけるそれぞれのハッシュチェーンの登録内容を示している。なお、図７に示す例では、理解を容易にするため、各データブロックに格納されているハッシュ値や分析用付加データについては省略している。
【００５０】
具体的に、図６（Ａ）の１つ目のトランザクションに対応する観光客Ａが観光スポット１を訪れたというトランザクションデータは、図４に示すデータブロック登録処理が行われることにより、図７に示す観光客Ａの種別のハッシュチェーンにおけるデータブロック（１）および観光スポット１の種別のハッシュチェーンにおけるデータブロック（１）に登録される。図６（Ａ）の２つ目のトランザクションに対応する観光客Ａが観光スポット４を訪れたというトランザクションデータは、図４に示すデータブロック登録処理が再度行われることにより、図７に示す観光客Ａの種別のハッシュチェーンにおけるデータブロック（２）および観光スポット４の種別のハッシュチェーンにおけるデータブロック（１）に登録される。そして、図６（Ａ）の３つ目のトランザクションに対応する観光客Ｂが観光スポット２を訪れたというトランザクションデータは、図４に示すデータブロック登録処理が再度行われることにより、図７に示す観光客Ｂの種別のハッシュチェーンにおけるデータブロック（１）および観光スポット２の種別のハッシュチェーンにおけるデータブロック（１）に登録される。このように、トランザクションの数に対応した回数のデータブロック登録処理が行われることにより、それぞれのトランザクションデータが対応する種別のハッシュチェーンに連結する（図６（Ａ）の４つ目以降のトランザクションについても同様）。
【００５１】
以上がハッシュチェーン登録装置として機能した場合における情報処理装置１００の動作である。続いてレコメンド装置として機能した場合における情報処理装置１００の動作について、図８〜図１７を参照して説明する。なお、理解を容易にするため、以下の例では、図６（Ａ）に示す９個のトランザクションが発生して各トランザクションに対応して９回のデータブロック登録処理が行われ、図７に示すように各ハッシュチェーンのデータブロックが登録されているものとする。また、その後に図６（Ｂ）に示す１０個目のトランザクションが発生し、１０個目のトランザクション（観光客Ｄが観光スポット２を訪れた）の内容が、観光客Ｄの種別のハッシュチェーンおよび観光スポット２の種別のハッシュチェーンにそれぞれ登録されるものとして、以下説明する。
【００５２】
図８は、グラフ生成処理の一例を示すフローチャートである。当該グラフ生成処理は、ユーザの入出力部１３０に対する操作（入力操作）に基づいて開始される。当該グラフ生成処理は、各種別のハッシュチェーン１１１からユーザに所望された期間のトランザクションデータを取得し、有向二部グラフを生成するための処理である。有向二部グラフの詳細については後述する。なお、この実施の形態では、図４に示すデータブロック登録処理により、図７に示す登録内容のハッシュチェーンが生成されており（すなわち、図６（Ａ）に示す９個のトランザクションが発生して各トランザクションに対応して９回のデータブロック登録処理が行われた状態）、図７に示す全てのブロックを対象とした有向二部グラフを生成する場合を例に説明する。
【００５３】
グラフ生成処理を開始すると、情報処理装置１００は、データ取得部１２４の機能により、まず、グラフ生成の対象が指定されているか否かを判定する（ステップＳ３０１）。具体的に、ステップＳ３０１では、ユーザの入力操作により対象の期間（開始時間と終了時間）が指定されているか否かを判定する。
【００５４】
ステップＳ３０１にて対象の期間が指定されていると判定した場合（ステップＳ３０１；Ｙｅｓ）、情報処理装置１００は、データ取得部１２４の機能により、指定された期間に対応するデータブロックのトランザクションデータ（対象データ）を取得する（ステップＳ３０２）。ステップＳ３０２では、ユーザの入力操作により指定された期間に対応するデータブロックを、分析用不可データに含まれるタイムスタンプに基づいて特定し、当該データブロックに登録されたトランザクションデータ（対象データ）を取得する。
【００５５】
一方、ステップＳ３０１にて対象の期間が指定されていないと判定した場合（ステップＳ３０１；Ｎｏ）、情報処理装置１００は、データ取得部１２４の機能により、全てのデータブロックのトランザクションデータ（対象データ）を取得する（ステップＳ３０３）。上述したように、この実施の形態では、図７に示す全てのブロックを対象とした有向二部グラフを生成することから、ステップＳ３０３では、図７に示す全てのブロックのトランザクションデータが取得される。
【００５６】
ステップＳ３０２またはステップＳ３０３の処理を実行した後、情報処理装置１００は、グラフ生成部１２５の機能により、トランザクションデータの内容に基づいて、種別毎に重みを算出する（ステップＳ３０４）。具体的に、ステップＳ３０４の処理では、図９（Ａ）に示すように、観光客Ｃが観光スポット２を４回訪問しており、観光スポット３を１回訪問しており、合計で５回の観光をしているような場合、ステップＳ３０４では、図９（Ｂ）に示すように、各観光スポットへの訪問回数を合計値で除算して重みを算出する。観光客Ｃは、観光スポット２を４回訪問しており、観光スポット３を１回訪問していることから、図９（Ｂ）に示すように、それぞれの重みは、０．８０と０．２０となる。ステップＳ３０４では、この処理を全ての観光客について行うとともに、観光スポット側についても同様の処理を行う。例えば、観光スポット１については、観光客Ａのみが２回訪問していることから、観光スポット１から観光客Ａに対する重みは１．００となる（図１０参照）。観光スポット２については、観光客Ｂが１回、観光客Ｃが４回訪問しているため、観光スポット２から観光客Ｂに対する重みが０．２０、観光客Ｃに対する重みが０．８０となる（図１０参照）。
【００５７】
図８に戻り、ステップＳ３０５の処理にて全ての種別について重みを算出した後、情報処理装置１００は、グラフ生成部１２５の機能により、それぞれの種別のうち、起点（Ｆｒｏｍ）と終点（Ｔｏ）である取引対象をそれぞれ頂点とし、それぞれの頂点を辺で結んだ有向二部グラフを生成し（ステップＳ３０５）、グラフ生成処理を終了する。具体的に、ステップＳ３０５の処理では、それぞれの観光客を起点としそれぞれの観光スポットを終点とした頂点を、訪問有無に応じて辺で結び、図１０に示すような有向二部グラフを生成する。なお、図示する例では、理解を容易にするため、観光客側から観光スポット方向への矢印のみにて辺を表し、かつ、図８のステップＳ３０４にて算出した重みを、観光客側と観光スポット側のそれぞれで記載しているが、実際には、辺（矢印）の太さにより片側方向（観光客から観光スポット方向）の重みを表す（辺が太いほど重みが大きい）。この場合、観光スポット側から観光客側方向への辺（矢印）の太さにより、観光スポット側から（観光スポットから観光客方向）の重みを表せばよい。すなわち、ステップＳ３０５では、ステップＳ３０４にて算出した重みに応じた太さの辺（矢印）で、頂点をそれぞれの方向から結べばよい。
【００５８】
この実施の形態における観光客Ａは、観光スポット１と観光スポット４を訪れていることから（図６（Ａ）、図７参照）、図１０に示すように、観光客Ａの頂点は、観光スポット１と観光スポット４と結ばれる。観光客Ｂは、観光スポット２を訪れているため（図６（Ａ）、図７参照）、観光客Ｂの頂点は、観光スポット２と結ばれる。観光客Ｃは、観光スポット２と観光スポット３を訪れていることから（図６（Ａ）、図７参照）、図１０に示すように、観光客Ｃの頂点は、観光スポット２と観光スポット３と結ばれる。なお、当該有向二部グラフには、図１０に示すように、訪問回数に応じて図８のステップＳ３０４で算出された重みが含まれる（観光客側からの辺（矢印）の太さや、観光スポット側からの辺（矢印）の太さによりそれぞれの方向からの重みが表される）。
【００５９】
このように、グラフ生成処理が実行されることにより、図１０に示す有向二部グラフが生成されることとなる。このような状態において、図６（Ｂ）に示す１０個目のトランザクションが発生すると、図４のデータブロック登録処理により、１０個目のトランザクション（観光客Ｄが観光スポット２を訪れた）の内容が、観光客Ｄの種別のハッシュチェーンおよび観光スポット２の種別のハッシュチェーンにそれぞれ登録される（図示省略）。このような状況において、観光客Ｄに対しておすすめの観光スポットを提示する場合（観光客Ｄを推薦対象者（レコメンド対象とも言う）としておすすめの観光スポットを推薦する場合）におけるレコメンド処理について、以下説明する。なお、通常は、様々なトランザクションが発生するため、図１０に示す有向二部グラフについても、これに合わせてリアルタイムで更新されるが、この実施の形態では、理解を容易にするため、観光客Ｄが観光スポット２を訪れたという内容のトランザクションのみ発生し、その他のトランザクションについては発生しないものとする。すなわち、図１０に示す有向二部グラフは、リアルタイムでの更新が行われていないものとして以下説明する。
【００６０】
図１１は、レコメンド処理の一例を示すフローチャートである。当該レコメンド処理は、端末１００Ｄにより実行指示を受信することで実行されるものであるが、ユーザの入出力部１３０に対する操作（入力操作）に基づいて開始されてもよい。
【００６１】
図１１に示すレコメンド処理を開始すると、情報処理装置１００は、レコメンド処理部１２６の機能により、指定されたデータブロック（対象ブロック）のトランザクションデータを取得する（ステップＳ４０１）。この例では、図６（Ｂ）に示す１０個目のトランザクション（観光客Ｄが観光スポット２を訪れた）が対象であることから、観光客Ｄの種別のハッシュチェーンと観光スポット２の種別のハッシュチェーンから当該内容のトランザクションデータを取得する。なお、対象のトランザクションデータの取得については、例えば、ＦｒｏｍとＴｏの内容と期間とを指定して行えばよい。
【００６２】
ステップＳ４０１の処理を実行した後、情報処理装置１００は、レコメンド処理部１２６の機能により、図８のグラフ生成処理にて生成した有向二部グラフを編成する（ステップＳ４０２）。この例では、観光客Ｄが観光スポット２を訪れたというトランザクションが追加されたことから、図１０に示す有向二部グラフに、当該新たなトランザクションデータに対応する有向二部グラフが加算される。具体的に、この例におけるステップＳ４０２では、図１３に示すように、観光客Ｄの頂点を観光スポット２と結ぶ処理が行われる。なお、この例では、新たな観光客Ｄが観光スポット２を訪れたというトランザクションであったため、新たな辺（矢印）で結ぶ例を示したが、例えば、既存の観光客が既に訪問した観光スポットを再度訪問したような場合、すなわち訪問回数が増加した場合については、辺（矢印）の太さを、重みに応じて太い態様へと編成すればよい。
【００６３】
また、この例では、観光客Ｄが観光スポット２を訪れたというトランザクションが追加された場合について示していることから、新たなトランザクションデータに対応する有向二部グラフが図１０に示す有向二部グラフに加算される例を示したが、過去のトランザクションデータに対応する有向二部グラフを減算するようにしてもよい。例えば、図６（Ａ）に示す１個目のトランザクションに対応する有向二部グラフを減算する場合（観光客Ａが観光スポット１を訪れたというトランザクションを削除する場合）には、観光客Ａが観光スポット１への訪問回数が１減少するため（２回から１回となる）、図１０における観光客Ａから観光スポット１への辺（矢印）の太さを、重みに応じて細い態様へと編成すればよい（なお、観光スポット１から観光客Ａへの辺（矢印）については、当該観光スポット１には観光客Ａのみが訪問していることから重みが変更されないため、編成しなくてよい）。また、図６（Ａ）に示す２個目のトランザクションに対応する有向二部グラフを減算する場合（観光客Ａが観光スポット４を訪れたというトランザクションを削除する場合）には、観光客Ａが観光スポット４への訪問回数が０回となるため、図１０における観光客Ａから観光スポット４への辺（矢印）を削除する編成を行うとともに、観光スポット４から観光客Ａへの辺（矢印）を合わせて削除する編成を行えばよい。
【００６４】
図１１のステップＳ４０２の処理を実行した後、情報処理装置１００は、レコメンド処理部１２６の機能により、レコメンド値を算出するレコメンド値算出処理を実行する（ステップＳ４０３）。具体的に、ステップＳ４０３では、レコメンド対象の観光客が訪問した観光スポットのスコア（値１）を算出し、当該観光スポットを訪問した観光客のスコア（値２）を、値１に基づいて算出し、当該観光客が訪問した観光スポットのスコアをレコメンド値として、値２に基づいて算出する。換言すると、レコメンド対象者と似た行動を行っている観光客のスコアを算出し、当該スコアとその観光客の行動（訪れた観光スポット）から、レコメンド対象の観光客に対する行動（観光スポット）のレコメンド値を算出する。以下、観光客Ｄが観光スポット２を訪れた場合における、図１１のステップＳ４０３におけるレコメンド値算出処理について、図１２〜図１４を用いて説明する。
【００６５】
図１２は、図１１のステップＳ４０３の処理において実行されるレコメンド値算出処理の一例を示すフローチャートである。図１２に示すレコメンド値算出処理において、情報処理装置１００は、まず、レコメンド対象の観光客（推薦対象者）に初期値である１．００の値を与え、当該レコメンド対象者と結ばれた頂点（すなわち、推薦対象者に関連する取引対象）について、順方向（観光客から観光スポット方向）の重みを乗じて値１を算出する（ステップＳ５０１）。具体的に、ステップＳ５０１では、図１３に示すように、レコメンド対象である観光客Ｄに１．００の値を与える。そして、観光客Ｄに結ばれている辺は観光スポット２のみであることから、重みの１．００を乗じて、観光客Ｄから見た観光スポット２の値を１．００と算出する（図１３に示す観光スポット２の値１）。図１２のステップＳ５０１の処理を実行した後、情報処理装置１００は、値１を持つ頂点に結ばれた頂点（すなわち、値１の取引対象に関連する取引対象）について、逆方向（観光スポットから観光客方向）の重みを乗じて値２を算出する（ステップＳ５０２）。具体的に、ステップＳ５０２では、観光スポット２側からの重みは、観光客Ｂへの重みが０．２０、観光客Ｃへの重みが０．８０であることから、観光スポット２から見た観光客Ｂの値を、値１の１．００に重みの０．２０を乗じて０．２０（図１３に示す観光客Ｂの値２）と算出し、観光客Ｃの値を、値１の１．００に重みの０．８０を乗じて０．８０と算出する（図１３に示す観光客Ｃの値２）。
【００６６】
図１２のステップＳ５０２の処理を実行した後、情報処理装置１００は、値２を持つ頂点と結ばれた頂点（すなわち、値２の取引対象に関連する取引対象）について、順方向（観光客から観光スポット方向）の重みを乗じてレコメンド値を算出し（ステップＳ５０３）、レコメンド値算出処理を終了する。具体的に、ステップＳ５０２では、図１４に示すように、観光客Ｂと観光客Ｃのそれぞれの値（図１４に示す観光客Ｂおよび観光客Ｃの値２）に、観光客側から観光スポット側方向の重みを乗じて、それぞれの観光スポットのレコメンド値を算出する。より具体的に、情報処理装置１００は、レコメンド処理部１２６の機能により、観光客Ｂの値２の０．２０に観光スポット２への重み１．００を乗じて０．２０を算出する。また、観光客Ｃから観光スポット２への辺も存在することから、観光客Ｃの値２の０．８０に観光スポット２への重み０．８０を乗じて０．６４を算出する。そして、これらの値を合計して（０．２０＋０．６４）、観光スポット２のレコメンド値０．８４（図１４に示す観光スポット２のレコメンド値）を算出する。また、情報処理装置１００は、レコメンド処理部１２６の機能により、観光客Ｃの値２の０．８０に観光スポット３への重み０．２０を乗じて０．１６を算出する。当該観光スポット３については観光客Ｃのみが訪れており、観光客Ｂは訪れていないことから、当該０．１６の値をそのまま観光スポット３のレコメンド値（図１４に示す観光スポット３のレコメンド値）とする。
【００６７】
このように、図１２に示すレコメンド値算出処理では、レコメンド対象者に１．００の値を与え、当該レコメンド対象者と似た行動を取った者のスコア（値２）から当該レコメンド対象者向けのレコメンド値を算出する。
【００６８】
図１１に戻り、ステップＳ４０３の処理にてレコメンド値を算出した後、情報処理装置１００は、レコメンド処理部１２６の機能により、ステップＳ４０３の処理で算出したレコメンド値に基づいて、おすすめの観光スポットを入出力部１３０に表示することで観光客Ｄに対してレコメンドし（ステップＳ４０４）、レコメンド処理を終了する。図１４に示す例において、観光スポット２のレコメンド値は０．８４であり、観光スポット３のレコメンド値は０．１６である。ステップＳ４０４では通常、最も大きいレコメンド値の観光スポットを表示するが、観光客Ｄは既に観光スポット２を直近で訪問していることから、この例では、次点である観光スポット３が表示される。なお、最も高いレコメンド値の観光スポットを未訪問であれば、その観光スポットが表示されればよい。さらに、最も高いレコメンド値の観光スポットを直近で訪問していなくとも、既に訪問している場合には、次点の観光スポットを表示するようにしてもよい。また、例えば、３回以上訪問している場合は表示しないなど、訪問回数に応じて表示するか否かを決定してもよい。また、表示する観光スポットは１つでなくてもよく、上位３つを表示するようにしてもよい。この場合、既に訪問した観光スポットが含まれる場合には、さらに次点のレコメンド値の観光スポットを表示させる（上位４つなど）ようにしてもよい。なお、ステップＳ４０４では、当該レコメンド処理は、端末１００Ｄにより実行指示を受信することで実行された場合には、端末１００Ｄの入出力部１３０へ表示し、ユーザの入出力部１３０に対する操作（入力操作）に基づいて開始された場合には、当該入出力部１３０へ表示すればよい。
【００６９】
このように、この実施の形態における情報処理装置１００は、ハッシュチェーンで連結されたデータブロックに格納されたトランザクションデータから、任意の期間のデータを抽出して、有向二部グラフを生成する。そして、当該有向二部グラフを生成した後に発生したトランザクションデータをデータブロックから抽出して新たな有向二部グラフを生成し、それを加算することで有向二部グラフを編成して最新化することができる。また過去のトランザクションデータに対応する部分の有向二部グラフを減算することで、当該有向二部グラフから、時間が経過した過去分の影響を減ずることができる。すなわち、加算や減算を行うことで、いずれの期間のトランザクションを対象にレコメンドを行うかといった時間軸を任意に調整することが可能となる。したがって、トランザクションデータを好適に分析可能となり、さらに、当該分析結果に基づいて対象者にレコメンドすることが可能となる。
【００７０】
次に、観光客の行動変化に伴うレコメンド値の遷移について、図１５〜図１８を用いて説明する。図６（Ｂ）に示す１０個目のトランザクション（観光客Ｄが観光スポット２を訪れた）の内容が、観光客Ｄの種別のハッシュチェーンおよび観光スポット２の種別のハッシュチェーンにそれぞれ登録された後、レコメンド処理が実行されることにより、上述したように図１４に示す有向二部グラフが生成され、観光客Ｄに観光スポット３がレコメンドされる。このような状態で、観光客Ｄがさらに観光スポット１を訪れた場合を例に、以下説明する。
【００７１】
観光客Ｄがさらに観光スポット１を訪れたという新たなトランザクションが発生することで、図４のデータブロック登録処理により、当該トランザクションの内容が観光客Ｄの種別のハッシュチェーンおよび観光スポット１の種別のハッシュチェーンにそれぞれ登録される（図示省略）。そして、図１１に示すレコメンド処理が実行されると、ステップＳ４０１の処理において、情報処理装置１００は、観光客Ｄの種別のハッシュチェーンと観光スポット１の種別のハッシュチェーンから当該内容のトランザクションデータを取得する。
【００７２】
続いて、情報処理装置１００は、ステップＳ４０２の処理により、図１４に示す有向二部グラフを編成する（図１５参照）。具体的には、図１４に示す有向二部グラフに対し、観光客Ｄの頂点と観光スポット１とを結ぶ辺（矢印）を加算する（図１５参照）。なお、この場合、観光客Ｄの辺が２つになり、いずれも訪問回数が１回であることから、観光客Ｄから観光スポット１への重みが０．５となり、また、観光スポット２への重みが０．５となる。そのため、ステップＳ４０２の処理では、図１４における観光客Ｄから観光スポット２への辺の太さを０．５の重みに対応した太さへと編成するとともに、観光スポット１への辺の太さを０．５の重みに対応した太さで加算する（図１５参照）。
【００７３】
続いて、図１１のステップＳ４０３の処理、すなわち図１２のレコメンド値算出処理において、情報処理装置１００は、図１５に示すように、レコメンド対象である観光客Ｄに１．００の値を与える。そして、観光客Ｄに結ばれている辺は観光スポット１と観光スポット２であることから、それぞれの重みの０．５０を乗じて、観光客Ｄから見た観光スポット１の値を０．５０（図１５に示す観光スポット１の値１）、観光スポット２の値を０．５０（図１５に示す観光スポット２の値１）とそれぞれ算出する（図１２のステップＳ５０１）。
【００７４】
また、観光スポット１側からの重みは、観光客Ａへの重みが１．００であることから、図１２のステップＳ５０２の処理において、観光スポット１から見た観光客Ａの値を、値１の０．５０に重みの１．００乗じて０．５０（図１５に示す観光客Ａの値２）と算出する。また、観光スポット２側からの重みは、観光客Ｂへの重みが０．２０、観光客Ｃへの重みが０．８０であることから、図１２のステップＳ５０２の処理において、観光スポット２から見た観光客Ｂの値を、値１の０．５０に重みの０．２０を乗じて０．１０（図１５に示す観光客Ｂの値２）と算出し、観光客Ｃの値を、値１の０．５０に重みの０．８０を乗じて０．４０と算出する（図１５に示す観光客Ｃの値２）。
【００７５】
そして、情報処理装置１００は、図１２のステップＳ５０３の処理において、図１６に示すように、観光客Ａ、観光客Ｂおよび観光客Ｃのそれぞれの値（図１６に示す観光客Ａ、観光客Ｂおよび観光客Ｃの値２）に、観光客側から観光スポット側方向の重みを乗じて、それぞれの観光スポットのレコメンド値を算出する。
【００７６】
具体的に、情報処理装置１００は、図１２のステップＳ５０３の処理において、レコメンド処理部１２６の機能により、観光客Ａの値２の０．５０に観光スポット１への重み０．６７を乗じて０．３４を算出し、観光スポット１のレコメンド値（図１６に示す観光スポット１のレコメンド値）とする。また、情報処理装置１００は、レコメンド処理部１２６の機能により、観光客Ａの値２の０．５０に観光スポット４への重み０．３３を乗じて０．１７を算出し、観光スポット４のレコメンド値（図１６に示す観光スポット４のレコメンド値）とする。また、情報処理装置１００は、観光客Ｂの値２の０．１０に観光スポット２への重み１．００を乗じて０．１０を算出する。また、観光客Ｃから観光スポット２への辺も存在することから、観光客Ｃの値２の０．４０に観光スポット２への重み０．８０を乗じて０．３２を算出する。そして、これらの値を合計して（０．１０＋０．３２）、観光スポット２のレコメンド値０．４２（図１６に示す観光スポット２のレコメンド値）とする。また、情報処理装置１００は、レコメンド処理部１２６の機能により、観光客Ｃの値２の０．４０に観光スポット３への重み０．２０を乗じて０．０８を算出し、観光スポット３のレコメンド値（図１６に示す観光スポット３のレコメンド値）とする。
【００７７】
その後、図１１のステップＳ４０４の処理において、情報処理装置１００は、レコメンド処理部１２６の機能により、ステップＳ４０３で算出したレコメンド値に基づいて、おすすめの観光スポットを入出力部１３０に表示することで観光客Ｄに対してレコメンドする。この例におけるレコメンド値は、図１６に示すように、観光スポット２のレコメンド値（０．４２）が最も大きく、次いで観光スポット１のレコメンド値（０．３３）、その次が観光スポット４のレコメンド値（０．１７）となっており、観光スポット３のレコメンド値（０．０８）が最も小さくなっている。この場合、観光客Ｄが直近で訪れているのは観光スポット１であるため、情報処理装置１００は、レコメンド値が最も大きい観光スポット２をおすすめの観光スポットとして表示する。なお、観光スポット１〜４の全てを、レコメンド値の高い方から順に表示するようにしてもよい。その際には、レコメンド値順に、おすすめ度が視認可能なように、例えば数値や星の数など、付加的要素とともに表示してもよい。
【００７８】
このように、観光客Ｄが観光スポット１を訪れたという新たなトランザクションが１つ発生するだけで、観光スポット２を訪れた観光客の影響が低下し、レコメンド値が変化する。上述したように、通常は、様々なトランザクションが発生し、それに伴って有向二部グラフはリアルタイムで更新が行われていることから、発生したトランザクションデータの影響をより多く受け、レコメンド値が逐一変更されることとなる。したがって、レコメンド対象者に対し、より精度良くレコメンドすることができる。
【００７９】
続いて、観光客の行動変化に伴うレコメンド値の変化を示す例として、図１６に示す状態から、観光客Ｄが観光スポット１をもう１回訪れ、さらに観光スポット４を訪れた場合を例に説明する。換言すると、図６（Ｂ）に示す状態から、観光客Ｄが観光スポット１を訪れたというトランザクションが発生した後、さらに、観光客Ｄが観光スポット１をもう１回訪れたというトランザクションと、観光スポット４を訪れたというトランザクションが発生した場合について説明する。なお、この状態において観光客Ｄは、観光スポット１を２回、観光スポット２および４をそれぞれ１回ずつ訪れており、観光客Ａと似た行動となっている（観光客Ａは、観光スポット１を２回、観光スポット４を１回訪れている）。
【００８０】
この場合、図１１のステップＳ４０２の処理により、図１７に示すように有向二部グラフが編成される。具体的には、図１６に示す有向二部グラフに対し、観光客Ｄの頂点と観光スポット４とを結ぶ辺（矢印）を加算する（図１７参照）。また、観光客Ｄの辺が３つになり、訪問回数は、観光スポット１が２回、観光スポット２および観光スポット４がそれぞれ１回ずつであることから、観光客Ｄから観光スポット１方向の重みが０．５０となり、観光スポット２および観光スポット４方向の重みがそれぞれ０．２５となる。そのため、ステップＳ４０２の処理では、図１６における観光客Ｄから観光スポット２への辺の太さを０．２５の重みに対応した太さへと編成するとともに、観光スポット４への辺の太さを０．２５の重みに対応した太さで加算する（図１７参照）。
【００８１】
続いて、図１１のステップＳ４０３の処理、すなわち図１２のレコメンド値算出処理において、情報処理装置１００は、図１７に示すように、レコメンド対象である観光客Ｄに１．００の値を与え、それぞれの頂点における値１と値２を算出し、観光スポット１〜観光スポット４のレコメンド値を算出する（演算の詳細については省略する）。このように、観光客Ｄが観光スポット１をもう１回訪れたというトランザクションと、観光スポット４を訪れたというトランザクションが発生した場合、観光スポット１〜観光スポット４のレコメンド値が、図１６に示す値から図１７に示す値へと変化する。これにより、図１６に示す状態では、観光スポット２のレコメンド値が最も高く、次に観光スポット１のレコメンド値が高かったが、図１７に示す状態では、観光スポット１のレコメンド値が最も高く、次に観光スポット４のレコメンド値が高くなり、観光客Ｄへのレコメンド順位は、観光客Ａの行動に近づくようになる。
【００８２】
このように、観光客Ｄが何らかの行動をとることで、レコメンドされる観光スポットの対象が追加されたり、順位が入れ替わったりして、レコメンド対象の観光客である観光客Ｄにとってより精度の高い観光スポットがレコメンドされるようになっていく。なお、レコメンド対象者である観光客Ｄの行動のみに限られず、他の観光客の行動によっても、観光客Ｄに対しての各観光スポットのレコメンド値が変化する。例えば、図１７に示す状態において、観光客Ｃが観光スポット１を訪れた場合、観光客Ｄへの各観光スポットのレコメンド値は、図１８に示すように変化する。
【００８３】
図１７に示す状態において、観光客Ｃが観光スポット１を訪れたというトランザクションが発生すると、図１１のステップＳ４０２の処理により、図１８に示すように有向二部グラフが編成される。具体的には、図１７に示す有向二部グラフに対し、観光客Ｃの頂点と観光スポット１とを結ぶ辺（矢印）を加算する（図１８参照）。この場合、観光客Ｃの辺が３つになり、訪問回数はそれぞれ、観光スポット１が１回、観光スポット２が４回、観光スポット３が１回であることから、観光客Ｃから観光スポット１方向の重みが０．１７となり、観光スポット２方向の重みが０．６７となり、観光スポット３方向の重みがそれぞれ０．１７となる。そのため、ステップＳ４０２の処理では、図１８における観光客Ｃから観光スポット１への辺の太さを０．１７の重みに対応した太さで加算するとともに、観光スポット２への辺の太さを０．６７の重みに対応した太さへと編成し、観光スポット３への辺の太さを０．１７の重みに対応した太さへと編成する（図１８参照）。
【００８４】
続いて、図１１のステップＳ４０３の処理、すなわち図１２のレコメンド値算出処理において、情報処理装置１００は、図１８に示すように、レコメンド対象である観光客Ｄに１．００の値を与え、それぞれの頂点における値１と値２を算出し、観光スポット１〜観光スポット４のレコメンド値を算出する（演算の詳細については省略する）。ここで、観光客Ｃが新たに観光スポット１を訪れたことから、観光スポット１から観光客Ａ方向の重みが０．６７（観光客Ａは２回観光スポット１を訪問）となり、観光スポット１から観光客Ｃ方向の重みが０．３３（観光客Ｃは２回観光スポット１を訪問）となる。そのため、観光客Ｄは、観光客Ｃの行動にも影響を受けることとなる。したがって、図１７に示す状態では、観光スポット４のレコメンド値は観光スポット２のレコメンド値よりも大きかったが、図１８に示す状態では、観光スポット２のレコメンド値の方が観光スポット４のレコメンド値よりも大きくなり、レコメンド値の順位として、観光スポット２が観光スポット４と入れ替わることなる。
【００８５】
このように、レコメンド対象者である観光客Ｄの行動のみに限られず、他の観光客の行動によっても、観光客Ｄに対しての各観光スポットのレコメンド値が変化する。したがって、レコメンド対象者およびその他の者の行動を示すトランザクションデータを取り込むことで、好適なデータ分析が可能となり、より適格なレコメンドを行うことができる。また、新たに発生したトランザクションデータを追加（加算）することでレコメンドに用いる有向二部グラフを最新化することができ、処理負担を軽減することができる。また、例えば「１年前の本日のトランザクションデータ」を当該有向二部グラフから削除（減算）することで過去分を容易に対象外とすることができる。さらに、それぞれの行動履歴を示すトランザクションデータと重み付けとの関係からレコメンド結果が導き出されているため、レコメンド結果に対する論理的な説明が可能となる。
【００８６】
（変形例）
なお、この発明は、上記実施の形態に限定されず、様々な変形及び応用が可能である。例えば、情報処理装置１００では、上記実施の形態で示した全ての技術的特徴を備えるものでなくてもよく、従来技術における少なくとも１つの課題を解決できるように、上記実施の形態で説明した一部の構成を備えたものであってもよい。また、下記の変形例それぞれについて、少なくとも一部を組み合わせてもよい。
【００８７】
上記実施の形態では、観光客と観光先（観光スポット）との間で生じた事象をトランザクションデータとしてハッシュチェーンで連結されたデータブロックに格納し、当該トランザクションデータを用いてレコメンドする例を示しているが、これは一例である。トランザクションとして表現可能なものであれば、観光客と観光先（観光スポット）との間で生じた事象に限られない。例えば、顧客と店舗との間で発生した事象（来店回数や購入金額など）をトランザクションデータとしてハッシュチェーンで連結されたデータブロックに格納し、当該トランザクションデータを用いて顧客に対しおすすめの商品や店舗をレコメンドするようにしてもよい。
【００８８】
また、上記実施の形態では、図８のステップＳ３０１の処理において、ユーザの入力操作により対象の期間（開始時間と終了時間）が指定されているか否かを判定し、ユーザの指定した期間内のトランザクションデータに基づいて観光スポットをレコメンドする例を示したが、これは一例である。ステップＳ３０１では、対象の期間が指定されているか否かではなく、例えば、「天気が悪い日」や「平均気温が一定以上となった日のみ」、「昼の時間帯」といった条件が指定されているか否かを判定するようにしてもよい。これによれば、指定期間のみならず、一定の条件下におけるレコメンドを好適に行うことができる。また、例えば、「天気が悪く、平均気温が一定以下となった日の昼の時間帯」といった条件を指定してレコメンド結果（その条件によって出力されるおすすめの観光スポット）を得た後、全てのトランザクションデータに基づくレコメンド結果と比較して、当該条件下における傾向を分析してもよい。
【００８９】
また、上記実施の形態では、観光客Ｄが観光スポット２を訪れたというトランザクションが追加された場合におけるレコメンド処理について説明したが、例えば、図１０に示す状態（何ら新たなトランザクションが発生していない場合）においても図１１に示すレコメンド処理が実行されてもよい。この場合には、ステップＳ４０１およびステップＳ４０２の処理を実行せずに、ステップＳ４０３の処理において、レコメンド対象者の観光客に値１．００を与え、図１２に示すレコメンド値算出処理を実行すればよい。
【００９０】
また、上記実施の形態では、レコメンド対象者である観光客について、図１２に示すレコメンド値算出処理のステップＳ５０１にて１．００の値を与える例を示したが、この他にも、例えば、図１９に示すように、「性別」などの属性について値を与えることで、属性毎に傾向をさらに分析することができる。例えば、「男性が好む観光スポットはどこか」という傾向を調べる場合、図１９に示すように、「男性」の属性に１．００を与える。なお、当該属性（属性情報）については、観光客Ａおよび観光客Ｄの種別のハッシュチェーンにおけるインデックス値が「０」のデータブロックに「男性」の属性が登録されているものとする。また、観光スポット２および観光スポット３の種別のハッシュチェーンにおけるインデックス値が「０」のデータブロックに「グルメ」の属性の観光スポットが、観光スポット１および観光スポット４の種別のハッシュチェーンにおけるインデックス値が「０」のデータブロックに「文化施設」の属性の観光スポットが、それぞれ属性情報として登録されているものとする。また、図８に示すグラフ生成処理において、図１９に示すように、当該属性を含む有向二部グラフが生成されているものとする。なお、当該属性情報は、インデックス値が「０」のデータブロックに限られず、全てのインデックス値のデータブロックに登録されていてもよい。
【００９１】
そして、上記実施の形態と同様に（図１２に示すレコメンド値算出処理と同様に）それぞれの値に重みを乗じて、図１９に示す値ａと値ｂとを算出する。具体的には、男性の属性に結ばれた観光客は観光客Ａと観光客Ｄの２人であることから、０．５０ずつ分配する。そして、観光客Ａと結ばれた観光スポットは観光スポット１と観光スポット４であり、観光スポット１側の重みは０．６７である。そのため、観光客Ａに分配された０．５０に重み０．６７を乗じて０．３３５を得る。一方、観光スポット４側の重みは０．３３であることから、当該０．５に重み０．３３を乗じて０．１６５を得る。次に、観光客Ｄと結ばれた観光スポットは観光スポット１、観光スポット２、および観光スポット４であり、観光スポット１側の重みは０．５である。そのため、観光客Ｄに分配された０．５０に重み０．５を乗じて０．２５を得る。また、観光スポット２および観光スポット４の重みはそれぞれ０．２５であることから、当該０．５に重み０．２５を乗じて０．１２５をそれぞれ得る。なお、観光スポット２については観光客Ａが訪れていないことから、観光スポット２の値ａを０．１３とする。
【００９２】
そして、観光客Ａから観光スポット１への算出値０．３３５と、観光客Ｄから観光スポット１への算出値０．２５を加算し、観光スポット１の値ａとして０．５９を得る。また、観光客Ａから観光スポット４への算出値０．１６５と、観光客Ｄから観光スポット４への算出値０．１２５を加算し、観光スポット４の値ａとして０．２９を得る。続いて、観光スポット１と観光スポット４はそれぞれ「文化施設」の属性であることから、それぞれの値ａを加算し、「文化施設」の属性の値ｂとして０．８８を得る。また、観光スポット２は「グルメ」の属性であることから、値ａをそのまま値ｂとして（今回観光スポット３には値ａは算出されていないため）、０．１３を得る。なお、当該値ｂは上記実施の形態におけるレコメンド値と同様である。したがって、「文化施設」の属性の値ｂの方が「グルメ」の属性の値ｂよりも高いため、「男性」は「グルメ」よりも「文化施設」を好む傾向にある、ということがわかる。これによれば、例えば、観光客Ｄが「男性」である場合には「文化施設」の属性に属する観光スポットを全ておすすめするなど、上記実施の形態におけるレコメンド値に基づく観光スポットに限らず、属性ベースのレコメンド（属性情報に基づくレコメンド）を合わせて行うこともできる（すなわち、上記実施の形態におけるレコメンド値に基づく観光スポットと、属性情報に基づいてレコメンドされる観光スポットとの両方をそれぞれユーザにとって識別可能に表示する）。
【００９３】
このように、各種別のハッシュチェーンについて、属性の情報を持たせ、それを含めた有向二部グラフを生成することで、属性レベルの傾向を分析することができる。なお、この例では、理解を容易にするため「性別」の属性のみを用いたが、例えば、「性別」と「国籍（日本人と外国人）」など、属性は複数用いられてもよい。これによれば、「日本人の男性が好む観光スポットはどこか」や、「外国人の女性が好む観光スポットはどこか」など、より細かい属性毎の傾向を分析することができる。また、この例では、「性別」の属性から観光スポットの属性の方向（上流から下流ともいう）へ値を算出していく例を示したが、逆方向で同様の算出を行うことにより、例えば、「文化施設を好む観光客」を抽出することが可能となる。そして、当該抽出した観光客が訪れた観光スポットを調べ（行動履歴を調べ）、見込み客となる場合（例えばまだ訪問していない観光客である場合）には案内メールを送信するといったことも実現可能となる。
【００９４】
また、属性情報を持つハッシュチェーンが十分に存在すれば、対象となる観光客とよく似た行動をしている観光客の属性を用いて、当該対象となる観光客の属性を推計することができる。例えば、図２０に示すように、観光客Ａが男性であり、観光客Ｂおよび観光客Ｃが女性である場合（それぞれの種別のハッシュチェーンのインデックス値「０」のデータブロックにそれぞれの属性情報が登録されている場合）、値２を用いることで、観光客Ｄの属性を推計することができる。なお、図２０に示す値２は、図１７に示す値２と同様である。
【００９５】
具体的には、観光客Ｄに値１．００を与えた場合に算出される値２は、観光客Ａの値２が０．７５で最も大きくなる（すなわち、観光客Ｄに最も似た行動をしている観光客は観光客Ａである）。そのため、観光客Ａの属性の男性の属性の値Ｘは０．７５となる。一方、観光客Ｂの値２は０．０５、観光客Ｃの値２は０．２０となり、これらは女性の属性に属しているため、女性の属性の値Ｘは、これらを加算した０．２５となる。これにより、観光客Ｄが男性である確率は７５％（女性である確率は２５％）と推計することができる。
【００９６】
このように、属性情報を持つハッシュチェーンが十分に存在すれば、対象となる観光客とよく似た行動をしている観光客の属性を用いて、当該対象となる観光客の属性を推計することができる。ただし、属性情報を持つハッシュチェーンが十分に存在しない場合などは、この推計の精度が落ちてしまう。このように推計の精度が低くなる場合には、属性情報に基づくレコメンドの精度も低くなる。そのため、このような場合、属性情報をプログラムで管理しても有効活用することが難しい。そこで、属性情報の有効性を評価し、評価スコアが「０」に近く、予め設定した閾値を下回った場合には、当該属性情報に基づくレコメンドは有効ではないものとして、上記実施の形態におけるレコメンド値に基づく観光スポットのレコメンドのみ表示し、属性情報に基づいてレコメンドされる観光スポットについては表示しないようにしてもよい。以下、評価スコアの算出について説明する。
【００９７】
なお、以下の例では、ハッシュチェーンに登録された観光客の性別の比率を男性：女性＝１：１（男性２人、女性２人）とする。例えば、調べたい観光客の属性が「男性」で、その観光客に近い他の観光客の性別が「男性の確率＝０.７５」、「女性の確率＝０.２５」であった場合、男性であることの期待値は「１／(１＋１)=０.５０」であるから、０．７５−０．５０＝０．２５を評価スコアとする。その一方で、調べたい観光客の属性が「女性」であった場合、０．２５−０．５０＝−０．２５の評価スコアとなる。図２０に示す状態において、観光客Ｄが男性の属性である場合、観光客Ｄの評価スコアは０．２５となる。このような評価スコアを観光客Ｄだけでなく、観光客Ａ〜Ｃについても算出する。
【００９８】
図２０に示す状態において、観光客Ａに最も近いのは、観光客Ｄであるため、観光客Ａに値１．００を与えた場合、観光客Ｄの値２は１．００となる。観光客Ａも観光客Ｄも男性の属性であることから、観光客Ａの評価スコアは１．００−０．５０＝０．５０となる。また、観光客Ｂに最も近いのは観光客Ｃであるため（観光スポット２から観光客Ｃへの重みは０．８で、観光客Ｄへの重みは０．２）、観光客Ｂに値１．００を与えた場合、観光客Ｃの値２は０．８となる。観光客Ｂも観光客Ｃも女性の属性であることから、観光客Ｂの評価スコアは０．８０−０．５０＝０．３０となる。また、観光客Ｃに最も近いのは観光客Ｂおよび観光客Ｄであるため（観光客Ｃから観光スポット２と観光スポット３につながっているが、観光スポット３がつながっているのは観光客Ｃのみのため除外する。そして観光スポット２のつながっている先から観光客Ｃを除外する。この処理を行った後の観光スポット２から観光客Ｂへの重みは０．５で、観光客Ｄへの重みは０．５）、観光客Ｃに値１．００を与えた場合、観光客Ｂの値２および観光客Ｄの値２はそれぞれ０．５となる。観光客Ｃも観光客Ｂも女性の属性であることから、観光客Ｂ側を基準とした観光客Ｃの評価スコアは０．５０−０．５０＝０．００となる。また、観光客Ｃは女性の属性であり、観光客Ｄは男性の属性であることから、観光客Ｄ側を基準とした観光客Ｃの評価スコアは、０．５０−０．５０＝０．００となる。
【００９９】
そして、観光客Ａ〜観光客Ｄのそれぞれの評価スコアの合計は、０．５０＋０．３０＋０．００＋０．２５＝１．０５となり、その平均値は、０．２６となり、それを属性の評価スコアとする（なお、評価スコアの最大値は０．５０である）。ここで、予め定められている閾値が０．２５である場合、０．２６＞閾値となるため、「性別」の属性に基づくレコメンドは有効であると判断すればよい。
【０１００】
その一方で、図２１に示す状態では、日本人と外国人の比率は、３：１（日本人３人、外国人１人）である。そのため日本人であることの期待値は０．７５、外国人であることの期待値は０．２５となる。観光客Ｄに値１．００を与えた場合、観光客Ａの値２は０．７５、観光客Ｃの値２が０．２０、いずれも日本人であることから、観光客Ｄの評価スコアは、０．７５＋０．２０−０．７５＝０．２０となる。同様に、観光客Ａに値１．００を与えた場合、観光客Ａの評価スコアは１．００−０．７５＝０．２５となる。また、観光客Ｂに最も近いのは観光客Ｃであるため、観光客Ｂに値１．００を与えた場合、観光客Ｃの値２は０．８０となり、観光客Ｄの値２は０．２０となる。観光客Ｂは「外国人」の属性であり、観光客Ｃと観光客Ｄは「日本人」の属性であることから、観光客Ｂの評価スコアは、０．２０＋０．８０−０．２５＝０．７５となる。また、観光客Ｃに最も近いのは観光客Ｂおよび観光客Ｄであるため、観光客Ｃに値１．００を与えた場合、観光客Ｂの値２および観光客Ｄの値２はそれぞれ０．５となる。観光客Ｂは「外国人」の属性であり、観光客Ｃと観光客Ｄは「日本人」の属性であることから、観光客Ｃの評価スコアは、０．５０−０．７５＝−０．２５となる。
【０１０１】
観光客Ａ〜観光客Ｄのそれぞれの評価スコアの合計は、０．２０＋０．２５−０．７５−０．２５＝−０．５５となり、その平均値（属性の評価スコア）は、−０．１４となる。ここで、予め定められている閾値が０．２０である場合、−０．１４＜閾値となるため、「国籍」の属性に基づくレコメンドは無効であると判断すればよい。このような場合、属性情報に基づいてレコメンドされる観光スポットについては表示しないようにすればよい。なお、閾値については、属性毎に任意に設定可能であればよい。例えば、ユーザの年齢や性別、国籍の他、トランザクションの種類に応じて任意の値を設定可能であればよい（具体的には、観光客と観光スポットとで発生したトランザクションと、顧客と店舗とで発生したトランザクションとでは異なる閾値にするなど）。
【０１０２】
また、上記実施の形態におけるレコメンド処理に加え、例えば、トランザクションデータの順序性に着目することで、さらなる分析が可能となる。具体的に、観光スポット２を訪れた観光客は、次に観光スポット１を訪れる可能性が高いといったことや、観光スポット１から観光スポット２といった順に訪問する観光客は少ないといったこと、さらに、観光スポット１を訪れた後は観光スポットｄが多い、などといった分析が可能となる。
【０１０３】
例えば、図２２に示すように、観光スポット２に着目し、観光スポット２と結ばれた観光客のトランザクションデータ（観光客Ｂ〜観光客Ｄ）を抽出する。これにより、抽出した観光客のハッシュチェーンに連なる一連のトランザクションデータに「観光スポット２」が含まれ、その前後のトランザクションデータが何であるか、およびその時間間隔がいかほどであるか、を分析することが可能となる。なお、図２１に示す例では、説明を簡略化するため、観光客Ｃの種別のハッシュチェーンに登録されたトランザクションデータを、図６に示す順とは異なるものとしており（図７とは異なるものとしており）、観光客Ｃは、観光スポット２、観光スポット３、観光スポット２、観光スポット１の順で訪問したものとしている。
【０１０４】
そして、抽出したトランザクションデータについて、着目した「観光スポット２」を基準として、その前後のトランザクションデータを、図２３に示すように配列する。これにより、着目したトランザクションデータの前後のトランザクションが何であるか、すなわち頻度が高いトランザクションデータの種類を特定することができる。図示する例では、観光スポット２の箱の上に観光スポット１が配列された数が多いことから、着目した「観光スポット２」の訪問客は、次に「観光スポット１」を訪れる可能性が高いことがわかる。
【０１０５】
なお、例えば、観光スポット２を訪れた後、一定期間（任意に設定可能な期間であればよい）経過した場合には、前後のトランザクションを配列しないようにしてもよい。例えば、図２３に示す例において、観光客Ｃの種別のハッシュチェーンに連結されていた観光スポット１を訪れたことを示すトランザクションデータが、観光スポット２を訪れてから１年以上経過している場合には、当該観光スポット１を訪れたことを示す内容のトランザクションデータ（図示する例では観光スポット１の箱）を配列しないようにしてもよい。この場合、一定期間経過しているか否かを判定し、経過していない場合にのみ配列するようにすればよい。
【０１０６】
また、これを応用し、「観光スポット２」を訪れた観光客の平均滞在時間を求め、観光スポット２に訪問した観光客に対して、平均滞在時間が経過した時点で「観光スポット１に訪問してはいかがですか」とプッシュ通知によりレコメンドするといった活用が可能になる。その際、時間を参照して、例えば、観光スポット１の営業時間外など「訪問データがない時間帯」であった場合には、観光スポット１に代えて観光スポット４をレコメンドするようにしてもよい。なお、平均滞在時間は、例えば、「観光スポット２」を訪れたそれぞれの観光客のハッシュチェーンについて、「観光スポット２」が登録されたデータブロックと、その次に訪れた観光スポットが登録されたデータブロックとのそれぞれのタイムスタンプの差の平均値により算出すればよい。
【０１０７】
また、これを応用し、例えば、「観光スポットｘの情報を閲覧」、「観光スポットｘの旅行商品ｙの情報を閲覧」、「旅行商品ｙの申し込み（購入）」といったトランザクションデータの順序性を分析し、かつそれらのトランザクションデータの時間間隔に基づく分析により、例えば、「観光スポットｘの旅行商品ｙの情報を閲覧」といったトランザクションの発生から１０分以内に申し込みが行われない場合には申し込みの確率が非常に低くなるといった分析を行い、レコメンドの優先順位を入れ替えるなどといった活用が可能となる（「観光スポットｘの旅行商品ｙの情報を閲覧」のトランザクションが発生した場合には、「旅行商品ｙの申し込み（購入）」といった特定のレコメンドを優先させるなど）。
【０１０８】
なお、上述の機能を、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）とアプリケーションとの分担、またはＯＳとアプリケーションとの協同により実現する場合等には、ＯＳ以外の部分のみを媒体に格納してもよい。
【０１０９】
また、搬送波にプログラムを重畳し、通信ネットワークを介して配信することも可能である。例えば、通信ネットワーク上の掲示板（ＢＢＳ、Ｂｕｌｌｅｔｉｎ  Ｂｏａｒｄ  Ｓｙｓｔｅｍ）に当該プログラムを掲示し、ネットワークを介して当該プログラムを配信してもよい。そして、これらのプログラムを起動し、オペレーティングシステムの制御下で、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行できるように構成してもよい。
【符号の説明】
【０１１０】
１  情報処理システム、１００、１００Ａ〜Ｃ  情報処理装置、１００Ｄ  観光客Ａ〜Ｄの端末、１１０  記憶部、１１１  各種別のハッシュチェーン、１２０  制御部、１２１  初期登録部、１２２  同期処理部、１２３  データブロック登録部、１２４  データ取得部、１２５  グラフ生成部、１２６  レコメンド処理部、１３０  入出力部、１４０  通信部、２１０  ネットワーク
【図１】
2020149120.tif 000003
【図２】
2020149120.tif 000004
【図３】
2020149120.tif 000005
【図４】
2020149120.tif 000006
【図５】
2020149120.tif 000007
【図６】
2020149120.tif 000008
【図７】
2020149120.tif 000009
【図８】
2020149120.tif 000010
【図９】
2020149120.tif 000011
【図１０】
2020149120.tif 000012
【図１１】
2020149120.tif 000013
【図１２】
2020149120.tif 000014
【図１３】
2020149120.tif 000015
【図１４】
2020149120.tif 000016
【図１５】
2020149120.tif 000017
【図１６】
2020149120.tif 000018
【図１７】
2020149120.tif 000019
【図１８】
2020149120.tif 000020
【図１９】
2020149120.tif 000021
【図２０】
2020149120.tif 000022
【図２１】
2020149120.tif 000023
【図２２】
2020149120.tif 000024
【図２３】
2020149120.tif 000025