プログラムのアルゴリズムについて教えてください。
アマゾン等のECサイトでは「この商品を見た人は、この商品も見ています」「この商品を買った人は、この商品も買っています」等の機能がついています。こういった機能はどう実現しているのでしょうか。
単純に考えれば、2次元配列(例えば$kanrenとか)を作り、商品名や商品IDを添え字にして
$kanren["shohin_a"]["shohin_b"]++
として関連度をカウントし、カウント数上位から表示する方法を思いつきます。
しかし、仮に商品が1万点とかあったとしたら、相当なメモリ使用量になります。データベースは詳しくないので分かりませんが、1万×1万個のデータを扱うのは負担は大きそうだなと思います。
またカウントアップのタイミングも難しく感じます。直前に見た(買った)商品だけでカウントアップするのでは関連度を出すのに不十分な気がしますし、かと言って過去10商品(過去10ページ)とかを記憶してカウントアップする場合、上手くやらないと2重・3重にカウントアップしてしまいそうです。
色々なサイトに実装されているので、何か上手なアルゴリズムがあるのだろうと思います。
そちらを教えていただければ。サイトのURL等や、書籍の名前でも構いません。
一応、使用言語はPHPを考えています。ですので、もしライブラリ等あるのであれば、そちらを紹介いただくのでも構いません。
ちなみに、当方のスキルですが、趣味プログラマとして30年ほどの経歴はあります。言語もBASIC、C、C++、Javascript、Perl、Pascal などの経験があります。オブジェクト指向プログラミングも分かります。あくまで自分の趣味の域ですので、何かフリーソフトを公開したり等の経験はないレベルですが、アルゴリズムの説明は概ね理解できると思います。また、データベースの利用経験は全くありませんのでSQLなどは分かりませんが、一般的な意味でのデータ管理の範囲ならば普通に理解できると思います。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
クラスター分析をしていると思いますよ。
http://www.albert2005.co.jp/technology/mining/cl …
計算はDWHによるバッチ処理でしょうね。
広告なんでリアルタイムに変更する必要はありませんから
マシンリソースについても
amazonだったら1万台以上の分散処理していると思われます
クラスター分析ですか。
ざっと読んでみましたが、面白いです。
何かのパラメータで対象をマッピングして、その距離を比較することによって、クラスターを形成…ってところでしょうか。
で、「ユーザーをパラメータにして商品をマッピングしてクラスター化し、対象商品と同じクラスター内の商品を表示する」か「商品をパラメータにしてユーザーをマッピングしてクラスター化し、対象ユーザーと同クラスターのユーザーの好みの商品を適当に表示する」みたいな感じなのですね。
計算タイミングも、確かに「広告なんでリアルタイムに変更する必要はありません」に尽きますね。あくまで便利機能と割り切れば、分散処理まで使わずとも、例えば7000件のデータを1000件ずつに分けて1週間かけて計算しても良いのでしょうし(1週間の間のデータの動きで、計算日によって結果に不整合が出るが、便利機能と割り切る)。
何となく、方向性が見えてきた気がします。ありがとうございます。
No.3
- 回答日時:
RDBが必須であるとは思いますけどね
それこそ所詮広告なんでトランザクション管理は重要でないです。
KVSなんかで処理を軽くしてもよいです。
30年前、それこそBASICやPASCALなんて連想配列すら使えない環境で、データ管理を全部自前でやらなきゃいけない状況からのスタートなので、(体系だった知識ではないですが)RDB的な思考やデータ設計はできるんですけれども。
ただそれ故に、SQL使ういわゆる「データベース」を勉強するモチベーションがわかないんですよね(苦笑)。
今やせっかく簡単にデータを自在に高速で堅牢に扱える環境が(タダで)使えるのだから、車輪の再発明みたいなことしてちゃダメだろと分かりつつ、ブラックボックス的なの嫌だなとか、勉強する時間と自力実装する時間とどっちが短いかなとか、ついつい考えてしまいます。
No.5
- 回答日時:
私もその昔PC-6001で打ち込みDTMやってました
カセットテープに保存したデータのロード時間が
打ち込んだ音楽より長いという懐かしい時代をすごしました
PCとは何をやるにも高価につき大変な時代でした
閑話休題、それを考えるといまやPCは安く、アプリはほぼタダという恵まれた時代です。
データベースも基本無料でそうとう高レベルの処理が可能になりましたので
やらない手はないと思いますよ。
古プログラマーの方なら分かってもらえると思いますが、昔はどんな処理でも自分でゴリゴリと書いていて、それがまた楽しかっただけに、ついつい車輪の再発明に走ってしまう誘惑が…(笑)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- 大学受験 大学の志望理由の添削をお願いします! 私は将来起業をしたいと考えております。 そのため貴学の商学 部 7 2022/09/17 14:45
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- 知的財産権 商標権侵害による損害賠償について教えて下さい。 4 2023/05/13 11:25
- ディスカウントストア・ドラッグストア 販売店(ドラッグストア)に長時間滞在するには? 5 2022/04/10 16:27
- その他(ビジネス・キャリア) 人の文章を書き換えることは著作権法違反にあたりますか? 2 2022/06/19 21:47
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- 財務・会計・経理 期末商品棚卸高の勘定について 5 2023/08/17 11:52
- メルカリ メルカリの事で相談させてください。 購入者から、イメージと違ったとのことで一方的にキャンセル申請され 6 2022/12/25 13:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Stuck
-
正しい五十音順について
-
Dijkstraて
-
m個の数字をn個のグループに分...
-
アルゴリズムの将来性について
-
[ EXCEL VBA ] 図形を読み込む...
-
ASPでのオークション
-
ルービックキューブの解法プロ...
-
リーグ戦日程表作成アルゴリズ...
-
迷路プログラム
-
確率論的な麻雀の勝ち方を教え...
-
VB2010にて分数表示(約...
-
【VisualBasic】ユークリッドの...
-
初心者がディープラーニングの...
-
5人のテストの点数を入力すると...
-
ガウス・ジョルダン法のプログ...
-
複数の点を最短距離で全て繋ぐ...
-
アルゴリズムとプロトコールの違い
-
A*アルゴリズム
-
最大公約数を求めたい!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
Dijkstraて
-
Stuck
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
グループを均等に分けるには?...
-
三次元形状曲面の導出法
-
あいまい検索(文字列一致率)
-
Visual studio2019 C#で生まれ...
-
gooという検索エンジンの後にGo...
-
フリーセルの難易度について
-
CRC-CCITT16の算出法
-
経路探索について
-
C♯で電卓を作成しています。演...
-
理系の高校生です。大学で情報...
-
OpenCVのライセンスについて
-
偏りのある乱数のアルゴリズム
-
詰め将棋をとくのは、アルゴリ...
おすすめ情報