(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023167646
(43)【公開日】2023-11-24
(54)【発明の名称】抽出プログラム、抽出方法および情報処理装置
(51)【国際特許分類】
G06Q 30/0203 20230101AFI20231116BHJP
【FI】
G06Q30/02 312
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022078977
(22)【出願日】2022-05-12
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】山田 芙夕楓
(72)【発明者】
【氏名】笠置 明彦
【テーマコード(参考)】
5L049
【Fターム(参考)】
5L049BB02
(57)【要約】
【課題】所望の組合せの抽出にかかる処理時間を短縮することを課題とする。
【解決手段】情報処理装置は、それぞれが複数の項目を有する複数のデータから、要求される項目の数を組み合わせた複数の組合せそれぞれについて、組合せ内の項目ごとに計数された該当する項目を有するデータの数のうち最小値が閾値以上である第1の組合せ、または、組合せ内の項目ごとに計数された該当しない項目を有するデータの合計数をデータの総数から減算した減算値が閾値以上である第2の組合せ、を抽出する。情報処理装置は、抽出された第1の組合せまたは第2の組合せを出力する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
コンピュータに、
それぞれが複数の項目を有する複数のデータから、要求される項目の数を組み合わせた複数の組合せそれぞれについて、組合せ内の項目ごとに計数された該当する項目を有するデータの数のうち最小値が閾値以上である第1の組合せ、または、組合せ内の項目ごとに計数された該当しない項目を有するデータの合計数をデータの総数から減算した減算値が前記閾値以上である第2の組合せ、を抽出し、
抽出された前記第1の組合せまたは前記第2の組合せを出力する、
処理を実行させることを特徴とする抽出プログラム。
【請求項2】
前記抽出する処理は、
前記複数の組合せから前記第1の組合せを抽出した場合、抽出された各第1の組合せについて組合せ内の全項目に該当するデータの数を計数し、
抽出された前記各第1の組合せのうち、計数された前記データの数が前記閾値以上である組合せを、出力対象として抽出する、
ことを特徴とする請求項1に記載の抽出プログラム。
【請求項3】
前記抽出する処理は、
前記データを複数のグループに分類し、
前記複数のグループそれぞれについて、前記複数の組合せ内の商品ごとに該当するデータの数を計数し、
各グループにおける前記最小値を合計した第1の合計値が前記閾値以上の組合せ、または、各グループにおける前記減算値を合計した第2の合計値が前記閾値以上の組合せ、を抽出する、
ことを特徴とする請求項1に記載の抽出プログラム。
【請求項4】
前記抽出する処理は、
前記第1の合計値および前記第2の合計値を算出し、
前記第2の合計値が前記閾値以上である組合せを抽出し、
前記第2の合計値が前記閾値以上かつ前記第1の合計値が前記閾値以上である組合せのうち、当該組合せ内の全項目に該当するデータの数が前記閾値以上である組合せを抽出する、ことを特徴とする請求項3に記載の抽出プログラム。
【請求項5】
前記複数の項目は、商品に関する情報であり、
前記複数のデータは、各ユーザの前記商品の購入履歴を示すデータであり、
前記抽出する処理は、
複数の商品の組合せそれぞれについて、組合せ内の商品ごとに計数された該当する項目を有するユーザの数のうち最小値が前記閾値以上である第1の組合せ、または、組合せ内の商品ごとに計数された該当しない項目を有するユーザの合計数をユーザの総数から減算した減算値が前記閾値以上である第2の組合せ、を抽出し、
前記出力する処理は、
抽出された商品の各組合せを出力する、
ことを特徴とする請求項1に記載の抽出プログラム。
【請求項6】
前記複数の項目と前記複数のデータとから構成され、該当するか否かを示す2値の要素から構成される行列データに対して、前記行列データの各要素が集約するように、行と列を並び替えた並び替え後の行列データを生成する処理を前記コンピュータに実行させ、
前記抽出する処理は、前記並び替え後の行列データから、前記第1の組合せ、または、前記第2の組合せを抽出し、
前記出力する処理は、抽出された前記第1の組合せまたは前記第2の組合せを出力する、
ことを特徴とする請求項1に記載の抽出プログラム。
【請求項7】
コンピュータが、
それぞれが複数の項目を有する複数のデータから、要求される項目の数を組み合わせた複数の組合せそれぞれについて、組合せ内の項目ごとに計数された該当する項目を有するデータの数のうち最小値が閾値以上である第1の組合せ、または、組合せ内の項目ごとに計数された該当しない項目を有するデータの合計数をデータの総数から減算した減算値が前記閾値以上である第2の組合せ、を抽出し、
抽出された各組合せを出力する、
処理を実行することを特徴とする抽出方法。
【請求項8】
それぞれが複数の項目を有する複数のデータから、要求される項目の数を組み合わせた複数の組合せそれぞれについて、組合せ内の項目ごとに計数された該当する項目を有するデータの数のうち最小値が閾値以上である第1の組合せ、または、組合せ内の項目ごとに計数された該当しない項目を有するデータの合計数をデータの総数から減算した減算値が前記閾値以上である第2の組合せ、を抽出し、
抽出された前記第1の組合せまたは前記第2の組合せを出力する、
制御部を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、抽出プログラム、抽出方法および情報処理装置に関する。
【背景技術】
【0002】
マーケティング分野では購買予測や広告、政治では選挙投票率の予測、医療では病気の原因発見を行うために、条件を満たすサンプルがN個以上ある条件も組合せを求めることが要求されることがある。例えば、マーケティング分野では、商品の組合せで、組合せ内のすべての商品を購入した人数が100人以上いる組合せを求めること、商品1と商品3を両方購入した人数が100人以上であるか否かを調査することなどがある。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、商品数(d_x)かつ顧客数(n)のデータ(d_x×nの行列)から、条件に一致する組合せを抽出するには、計算量が非常に多く、処理時間が長い。例えば、100個のデータから3つの組合せを抽出する数は、161700通りであり、100個のデータから5つの組合せを抽出する数は、75287520通りであり、これらの中から一致する条件を抽出するには、非常に多くの計算量が要求される。
【0005】
一つの側面では、所望の組合せの抽出にかかる処理時間を短縮することができる抽出プログラム、抽出方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0006】
第1の案では、抽出プログラムはコンピュータに、それぞれが複数の項目を有する複数のデータから、要求される項目の数を組み合わせた複数の組合せそれぞれについて、組合せ内の項目ごとに計数された該当する項目を有するデータの数のうち最小値が閾値以上である第1の組合せ、または、組合せ内の項目ごとに計数された該当しない項目を有するデータの合計数をデータの総数から減算した減算値が前記閾値以上である第2の組合せ、を抽出し、抽出された前記第1の組合せまたは前記第2の組合せを出力する、処理を実行させることを特徴とする。
【発明の効果】
【0007】
一実施形態によれば、所望の組合せの抽出にかかる処理時間を短縮することができる。
【図面の簡単な説明】
【0008】
【
図1】
図1は、実施例1にかかる情報処理装置を説明する図である。
【
図2】
図2は、実施例1にかかる情報処理装置の機能構成を示す機能ブロック図である。
【
図3】
図3は、商品購入履歴データを示す図である。
【
図4】
図4は、抽出対象の判定手法を説明する図である。
【
図5】
図5は、実施例1にかかる抽出処理を説明する図である。
【
図6】
図6は、実施例1にかかる上限値による抽出可否の判定を説明する図である。
【
図7】
図7は、実施例1にかかる下限値による抽出可否の判定を説明する図である。
【
図8】
図8は、実施例1にかかる抽出処理の流れを示すフローチャートである。
【
図9】
図9は、実施例2にかかる抽出処理を説明する図である。
【
図10】
図10は、実施例2にかかる上限値による抽出可否の判定を説明する図である。
【
図11】
図11は、実施例2にかかる下限値による抽出可否の判定を説明する図である。
【
図12】
図12は、実施例2にかかる抽出処理の流れを示すフローチャートである。
【
図15】
図15は、商品購入履歴データのソートを説明する図である。
【
図16】
図16は、商品購入履歴データのソートの有効性を説明する図である。
【発明を実施するための形態】
【0009】
以下に、本願の開示する抽出プログラム、抽出方法および情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
【実施例0010】
(情報処理装置の説明)
図1は、実施例1にかかる情報処理装置10を説明する図である。
図1に示すように、情報処理装置10は、複数のサンプルデータごとに、各商品の購入の有無を対応付けたデータから、条件に一致する組合せを抽出するコンピュータの一例である。
図1の例では、情報処理装置10は、商品数(d_x)かつ顧客数(n)のデータ((d_x)×nの行列データX)から、所望の条件と一致する組合せの抽出を実行する。
【0011】
例えば、マーケティング分野などでは、条件を満たすサンプルが下限閾値「s_min」個以上ある条件の組合せとして、複数の商品を購入した人数が100人以上である商品の組合せを求めたい場合がある。また、例えば3つの商品を購入した人数を求めたい場合もある。これらの場合、各列の値の論理和(AND演算)を行ごとに計算して、複数の商品の組合せの抽出が実行される。
図1の例では、行ごとに、ビット値のAND演算を実行し、計算値が「1」となった行が抽出される。しかし、この手法は、計算量が多い。特に、商品の購入履歴など膨大なデータを対象とする場合には膨大な計算量が要求される結果、所望の組合せの抽出にかかる処理時間が長時間化する。
【0012】
そこで、実施例1にかかる情報処理装置10は、それぞれが複数の項目を有する複数のサンプルデータから、要求される商品の数を組み合わせた複数の組合せそれぞれについて、組合せ内の商品ごとに計数された該当する商品を有するサンプルデータの数のうち最小値(e_max)が閾値(s_min)以上である第1の組合せを抽出する。または、情報処理装置10は、組合せ内の商品ごとに計数された該当しない商品を有するサンプルデータの合計数をサンプルデータの総数から減算した減算値(e_min)が閾値(s_min)以上である第2の組合せを抽出する。そして、情報処理装置10は、抽出された各組合せを出力する。
【0013】
具体的には、情報処理装置10は、任意のk個の商品の組合せを選択し、それらすべてを購入した人数が閾値「s_min」以上である商品の組合せを抽出する。つまり、情報処理装置10は、d_x個の商品からk個を選ぶ商品組合せのリストをLとした場合、Lの商品組合せに対して、商品すべてを購入した人数が「s_min」人以上かどうか確認したいとき、1人ずつ購入したかのチェックを行う前に、全体の簡易チェックを行う。この結果、情報処理装置10は、ANDの計算回数を削減することができるので、所望の組合せの抽出にかかる処理時間を短縮することができる。
【0014】
(情報処理装置の機能構成)
図2は、実施例1にかかる情報処理装置10の機能構成を示す機能ブロック図である。
図2に示すように、情報処理装置10は、通信部11、記憶部12、制御部20を有する。
【0015】
通信部11は、他の装置との間の通信を制御する処理部であり、例えば通信インタフェースなどにより実現される。例えば、通信部11は、管理者の端末から各種情報を受信し、外部装置などからデータを受信し、管理者の端末に制御部20による抽出結果を送信する。
【0016】
記憶部12は、各種データや制御部20が実行するプログラムなどを記憶する処理部の一例であり、例えばメモリやハードディスクなどにより実現される。この記憶部12は、商品購入履歴データ13と結果リスト14とを記憶する。
【0017】
商品購入履歴データ13は、ユーザごとの商品購入履歴を記憶するデータベースである。
図3は、商品購入履歴データ13を示す図である。
図3に示すように、商品購入履歴データ13は、サンプルIDごとに、商品1から商品x(xは任意の自然数)の購入履歴を記憶する。すなわち、商品購入履歴データ13は、商品数(d_x)かつ顧客数(n)である「d_x×nの行列データX」である。
【0018】
なお、サンプルIDは、ユーザを識別する情報である。各商品は、商品を識別する情報であり、購入している場合は「1」、未購入の場合は「0」が設定される。
図3の例では、サンプルID=0のユーザが、商品1と商品4を購入したことが示されている。
【0019】
結果リスト14は、制御部20により抽出された商品の組合せのリストである。例えば、結果リスト14に登録される各商品の組合せは、1人ずつ購入したかのチェックを行う前の簡易チェックで抽出された組合せである。結果リスト14に記憶される各商品の組合せについて、所望の組合せに該当するか否かの最終的な確認が実行される。
【0020】
制御部20は、情報処理装置10全体を司る処理部であり、例えばプロセッサなどにより実現される。この制御部20は、第1抽出部21、第2抽出部22、出力制御部23を有する。なお、第1抽出部21、第2抽出部22、出力制御部23は、例えばプロセッサが有する電子回路やプロセッサが実行するプロセスの一例である。
【0021】
一例として、本実施例では、商品購入履歴データ13から、3つの商品を購入した人数を求める例で説明する。すなわち、後述する閾値は、所望の商品数である「3」とする。
図4は、抽出対象の判定手法を説明する図である。
図4に示すように、制御部20は、商品1から商品x(xは任意の自然数)から、「商品1、商品2、商品3」、「商品1、商品3、商品4」、「商品2、商品3、商品4」のように重複しない組合せを生成し、各組合せについて結果リスト14に登録するか否かの判定を実行する。
【0022】
例えば、制御部20は、k個の商品の組合せAについて、組合せAを購入した人数の下限値または上限値を見積もる。
図5は、実施例1にかかる抽出処理を説明する図である。
図5に示すように、制御部20は、商品の組合せAを購入した人数sが「s_min」以上かどうかを調べる際に、まず商品の組合せA内の各商品(商品A_0、商品A_1・・・商品A_k)を購入した各人数(s_0からs_k)を求める。次に、制御部20は、ユーザ全体で購入人数sの下限値「e_min」と上限値「e_max」を計算することで、その値によって、組合せAが求めている組合せ(s_min≦s)かどうかを早期に判定する。
【0023】
第1抽出部21は、それぞれが複数の商品を有する複数のサンプルIDから、要求される商品の数を組み合わせた複数の組合せそれぞれについて組合せ内の商品ごとに計数された該当する商品を有するサンプルIDの数のうち最小値「e_max」が閾値「s_min」以上である第1の組合せ、を抽出する処理部である。
【0024】
ここで、「e_max」は、商品の組合せAを購入した人数sが多くとも「e_max」未満であることを判定するための値であり、組合せAを購入した人数の上限値である。例えば、組合せA内の各商品「商品A_0、商品A_1・・・商品A_k」を購入した各人数「s_0からs_k」である場合、第1抽出部21は、最小値「min(s_0、s_1、・・・、s_」)を、購入人数が一番少ない商品の購入人数を示す「e_max」として算出する。そして、第1抽出部21は、「e_max」が閾値以上である場合、商品の組合せAを結果リスト14に登録する。なお、「e_max<s_min」のとき、組合せAを購入した人数sは必ず「s_min」未満となり、求めたい組合せではないことがわかるので、ユーザごとの詳細な購入調査は行われない。
【0025】
図6は、実施例1にかかる上限値による抽出可否の判定を説明する図である。
図6では、「商品1、商品2、商品3」の組合せに対する4人のサンプルデータの購入履歴を例にして説明する。なお、サンプルID=1は、「商品1、商品2、商品3」のいずれも購入していないユーザのデータである。サンプルID=2は、「商品1、商品2、商品3」のすべてを購入したユーザのデータである。サンプルID=3は、「商品1、商品2、商品3」のすべてを購入したユーザのデータである。サンプルID=4は、「商品1」のみを購入したユーザのデータである。
【0026】
図6の場合、第1抽出部21は、商品1の購入者を「3」、商品2の購入者を「2」、商品3の購入者を「2」と算出し、「min(商品1を購入=3、商品2を購入=2、商品3を購入=2)」により、「e_max」を「2」と算出する。すなわち、第1抽出部21は、
図6に示す商品数3の商品の組合せにおいて、3個の商品のすべてを購入した人数は多くとも2人以下と判定する。そして、第1抽出部21は、「e_max=2」が閾値「s_min=3」未満であることから、
図6の商品の組合せを抽出対象外として、結果リスト14には登録しない。
【0027】
なお、第1抽出部21は、「e_max」が閾値「s_min」以上である場合、判定中である商品の組合せについて、全商品を購入した人数sを計数する。そして、第1抽出部21は、計数した人数sが閾値「s_min」以上である場合、
図6の商品の組合せを抽出対象として、結果リスト14には登録する。一方、第1抽出部21は、計数した人数sが閾値「s_min」未満である場合、
図6の商品の組合せを抽出対象外として、結果リスト14には登録しない。
【0028】
第2抽出部22は、それぞれが複数の商品を有する複数のサンプルIDから、要求される商品の数を組み合わせた複数の組合せそれぞれについて組合せ内の項目ごとに計数された該当しない項目を有するサンプルデータの合計数をサンプルデータの総数から減算した減算値(e_min)が閾値(s_max)以上である第2の組合せ、を抽出する処理部である。
【0029】
ここで、「e_min」は、商品の組合せAを購入した人数sが少なくとも「e_min」以上であることを判定するための値であり、組合せAを購入した人数の下限値である。具体的には、第2抽出部22は、ユーザ(サンプル)数nから各商品を購入しなかった人数の合計値「s_false」を減算した値を示す「e_min」が閾値(s_min)以上か否かを判定する。「n-(s_false)」が0より大きい場合、1人以上は組合せA内のすべての商品を購入していることとなる。
【0030】
例えば、組合せA内の各商品「商品A_0、商品A_1・・・商品A_k」を購入した人数「s_0からs_k」である場合、第1抽出部21は、最大値「max(0,n-((n-s_0)+(n-s_1)+・・・+(n-s_d_k)))」を、「e_min」として算出する。そして、第2抽出部22は、「e_min」≧閾値「s_min」のとき、組合せAを購入した人数sが必ず「s_min」以上であり、求めたい組合せであることがわかるので、組合せAを結果リスト14に追加する。
【0031】
図7は、実施例1にかかる下限値による抽出可否の判定を説明する図である。
図7では、「商品1、商品2、商品3」の組合せに対する4人のサンプルデータの購入履歴を例にして説明する。なお、サンプルID=1は、「商品2、商品3」を購入したユーザのデータである。サンプルID=2は、「商品1、商品3」を購入したユーザのデータである。サンプルID=3は、「商品1、商品3」を購入したユーザのデータである。サンプルID=4は、「商品1、商品2、商品3」のすべての商品を購入したユーザのデータである。
【0032】
図7の場合、第2抽出部22は、商品1について、購入者が3人であることから、全ユーザ数「4」から購入者「3」を減算した値「1」を算出する。第2抽出部22は、商品2について、全ユーザ数「4」から購入者「2」を減算した値「2」を算出し、商品3について全ユーザ数「4」から購入者「4」を減算した値「0」を算出する。そして、第2抽出部22は、全ユーザ数「4」から、減算結果「1」、「2」、「0」を加算した合計値「3」を減算した「4-3=1」を「e_min」として算出する。すなわち、第2抽出部22は、3個の商品すべてを購入した人数は少なくとも1人以上であることを抽出する。そして、第2抽出部22は、「e_min=1」が閾値「s_min=3」未満であることから、
図7の商品の組合せを抽出対象外とし、結果リスト14に登録しない。
【0033】
なお、第2抽出部22は、全ユーザ数から減算結果の合計値を減算した値が負の値となる場合は、「0」を「e_min」として算出する。
【0034】
出力制御部23は、第1抽出部21および第2抽出部22により抽出された各組合せを出力する処理部である。具体的には、出力制御部23は、組合せが記録された結果リスト14を、ディスプレイなどに出力し、管理者の端末に送信する。
【0035】
(処理の流れ)
図8は、実施例1にかかる抽出処理の流れを示すフローチャートである。なお、
図8では、商品数を「d_x」、顧客数(ユーザ数)を「n」、任意に設定可能な閾値を「s_min」、任意に設定可能な組み合わせる商品の数を「k」として説明するが、あくまで例示であり、これに限定されるものではない。また、矛盾のない範囲で、各処理を入れ替えることもできる。
【0036】
図8に示すように、情報処理装置10の制御部20は、d_x個の商品からk個を選んだ商品の組合せのリストLを生成する(S101)。続いて、制御部20は、d_x個の各商品を購入した人数を計算する(S102)。
【0037】
その後、制御部20は、リストLのすべての商品組合せに対して、S103からS110までのループ処理を実行する。
【0038】
具体的には、制御部20は、商品の組合せに対して、「e_max」と「e_min」を算出する(S104)。ここで、制御部20は、「e_min」が閾値「s_min」以上である場合(S105:Yes)、商品の組合せを結果リストに追加し(S106)、次の組合せについて処理を実行する。
【0039】
一方、制御部20は、「e_min」が閾値「s_min」未満である場合(S105:No)、「e_max」が閾値「s_min」未満であるか否かを判定する(S107)。ここで、制御部20は、「e_max」が閾値「s_min」以上である場合(S107:No)、組合せ内の全商品を購入した人数sを計算する(S108)。
【0040】
そして、制御部20は、組合せ内の全商品を購入した人数sが閾値「s_min」以上である場合(S109:Yes)、商品の組合せを結果リストに追加し(S106)、次の組合せについて処理を実行する(S110)。
【0041】
一方、組合せ内の全商品を購入した人数sが閾値「s_min」未満である場合(S109:No)、または、S107で「e_max」が閾値「s_min」未満である場合(S107:Yes)、制御部20は、商品の組合せを結果リストに追加することなく、次の組合せについて処理を実行する(S110)。
【0042】
その後、制御部20は、抽出された商品の組合せが登録される結果リスト14を出力する(S111)。
【0043】
(効果)
上述したように、情報処理装置10は、一人ずつの購入チェックを行う前に、ユーザ全体で人数の下限値と上限値を見積もることで、一人ずつの購入チェックを行う場合に比べて、AND演算を削減することができる。この結果、情報処理装置10は、所望の組合せの抽出にかかる処理時間を短縮することができる。
【0044】
また、情報処理装置10は、「e_max」か「e_min」のいずれかの判定のみを実行することで、一般的な手法よりも短時間で、所望の組合せをある程度まで絞り込むことができるので、一般的な手法と比べても十分な処理時間を短縮することができる。特に、処理時間やスペックに余裕がある場合に有効である。
【0045】
また、情報処理装置10は、S105と、S107からS109とを入れ替えることができる。すなわち、情報処理装置10は、「e_max」の判定の後に、「e_min」の判定を行うことができる。この結果、情報処理装置10は、「e_min」の判定対象を削減することができるので、処理時間の短縮かつ高速な組合せ抽出を実現することができる。
ところで、実施例1で説明した情報処理装置10は、実施例1の簡易チェックをグループごろに行うことで、効率的に簡易チェックを行うこともできる。そこで、実施例2では、情報処理装置10がグループごとに簡易チェックを行う例を説明する。
次に、上限値(e_max)と下限値(e_min)の各算出および各値を用いた抽出処理について説明する。ここでは、商品の組合せを「商品1、商品2、商品3」、全ユーザ数が8人、1グループが4人の2つのグループ(グループID=0、1)を例にして説明する。この例では、情報処理装置10は、3個の商品すべてを購入した人数を調べたいとき、サンプルを任意のグループに分割し、実施例1で説明した人数の下限値と上限値見積もりをグループごとに行う。こうすることで、情報処理装置10は、ユーザ全体に対する見積もりと比較して、より正確な見積もり値を算出できる。
同様に、情報処理装置10は、グループ2について、商品1を購入した人数「2」、商品2を購入した人数「1」、商品3を購入した人数「1」を計数する。この結果、情報処理装置10は、グループ2において各商品を購入した人数の最小値である「e_max」を「1」と算出する。すなわち、情報処理装置10は、グループ2に対して、商品1、商品2、商品3のすべてを購入したユーザが少なくとも1人はいることを検出する。
そして、情報処理装置10は、各最小値「e_max」の合計値を「sum=min(s1_0,・・・,s1_k)+min(s2_0,・・・,s2_k)」により、「e_mas_s」を「5」と算出する。その後、情報処理装置10は、「(e_max_s)=5」と閾値「s_min」との比較により、商品1から商品3の組合せを結果リスト14に登録するか否かを判定する。
同様に、グループ2について、情報処理装置10は、商品1に関し、ユーザ数「4」から購入者「2」を減算した値「2」を算出し、商品2を関し、ユーザ数「4」から購入者「1」を減算した値「3」を算出し、商品3に関し、ユーザ数「4」から購入者「1」を減算した値「3」を算出する。この結果、情報処理装置10は、グループ2について、全ユーザ数「4」から、減算結果「2」、「3」、「3」を加算した合計値「0」を減算した「4-8=-4」を算出し、値が負の値であることから「e_min」を「0」とする。すなわち、情報処理装置10は、グループ2に対して、3つの商品を購入したユーザが1人も重複していないことを検出する。
そして、情報処理装置10は、各最大値「e_min」の合計値「e_min_s」を「4」と算出する。その後、情報処理装置10は、「(e_min_s)=4」と閾値「s_min」との比較により、商品1から商品3の組合せを結果リスト14に登録するか否かを判定する。
具体的には、情報処理装置10は、グループごとに、商品の組合せに対して、「e_max」と「e_min」を算出する(S206)。また、情報処理装置10は、各グループの「e_min」を合計した「e_min_s」と、「e_max」を合計した「e_max_s」とを算出する(S207)。
ここで、情報処理装置10は、「e_min_s」が閾値「s_min」以上である場合(S208:Yes)、商品の組合せを結果リストに追加し(S209)、次の組合せについて処理を実行する(S213)。
一方、情報処理装置10は、「e_min_s」が閾値「s_min」未満である場合(S208:No)、「e_max_s」が閾値「s_min」未満であるか否かを判定する(S210)。ここで、情報処理装置10は、「e_max_s」が閾値「s_min」以上である場合(S210:No)、組合せ内の全商品を購入した人数sを計算する(S211)。
そして、情報処理装置10は、組合せ内の全商品を購入した人数sが閾値「s_min」以上である場合(S212:Yes)、商品の組合せを結果リストに追加し(S209)、次の組合せについて処理を実行する。
一方、組合せ内の全商品を購入した人数sが閾値「s_min」未満である場合(S212:No)、または、S210で「e_max_s」が閾値「s_min」未満である場合(S210:Yes)、情報処理装置10は、商品の組合せを結果リストに追加することなく、次の組合せについて処理を実行する(S213)。
そして、情報処理装置10は、グループ1とグループ2の各「e_man」の合計である「e_max_s=3」、各「e_min」の合計である「e_min_s=2」を算出する。この結果、情報処理装置10は、「e_max_s=3」も「e_min_s=2」も閾値「s_min=4」未満であることから、「商品1、商品4、商品3」を抽出対象外と判定する。
そして、情報処理装置10は、グループ1とグループ2の各「e_man」の合計である「e_max_s=5」、各「e_min」の合計である「e_min_s=4」を算出する。この結果、情報処理装置10は、「e_max_s=5」が閾値「s_min=4」以上であることから、「商品2、商品1、商品4」を抽出対象と判定する。
このように、情報処理装置10は、各商品の組合せについて、「e_man_s」および「e_min_s」の算出を実行し、抽出対象を選定する。すなわち、情報処理装置10は、「e_min_s」が閾値(s_min)以上の場合、購入人数は閾値以上なので、結果リスト14に登録し、「e_max_s」が閾値未満の場合、購入人数は閾値未満なので、結果リスト14には登録しない。なお、情報処理装置10は、「e_min_s<閾値≦e_max_s」の場合、購入人数は閾値以上か未満か判断不能なので、一人ずつの購入チェックを行う。
ここで、実施例2による抽出判定をより効率的に実行するためのソート処理について説明する。行列の並び順によって、下限値の見積もり「e_min_s」と上限値の見積もり「e_max_s」の値が異なることから、対象外(枝刈り)と判定される場合とされない場合がある。つまり、行列の並び順は計算効率に影響するので、行列を何らかの手法で予めソートしておくと、計算効率を上げることができる。
続いて、情報処理装置10は、行列データX´のうち、1が多い順で並び替える。このとき、情報処理装置10は、最初(左端)の商品ほど1を集約させるように、サンプルを並び替える。例えば、情報処理装置10は、商品2を購入したユーザ(サンプル)を上詰めにし、さらに商品1を購入したユーザを上詰めにし、さらに商品4を購入したユーザを上詰めにすることで、1が左上詰めになるように行の並び替えを実行し、行と列でソートした行列データX´´を生成する。
なお、実施例2では、左上に1を集約する例で説明したが、これに限定されるものではない。例えば、情報処理装置10は、右下(行列の後半)に1が集まるように集約してもよい。つまり、情報処理装置10は、なるべく同じグループに同じ要素値が集まるようにソートすればよい。