Webサイトは一種のフィードバックシステム
大学院の講義で、ロボットとかの制御システムで使う、フィードバック制御についての講義を受けているんですが、研究には役立ちそうにありません。でもせっかくなので遊んでみることにした。
Webサイトをフィードバックのあるシステムと見立て、記事を投稿してからのPVの移り変わりを再現してみます。
まず、ある日のサイトの状態を定義します。サイトの状態はベクトルとして表現します。
各要素は以下の通り
- サイトの評価。常連が居る場合この値が高くなる。
- 記事の話題性。今後取り上げられる記事ほどこの値が高いものになる。
- サイト盛り上がり度。今現在サイトにたくさんの人が来ている時は、この値が高いものになる。
- 記事の知識量。この値が高いほど検索エンジンに引っかかり易くなると考える。
そして、ある日のPV はサイトの状態から以下の様に出力されるものとします。
これは別の書き方をすると、
なので、サイトの評価と記事の話題性とサイトの盛り上がり度の合計がPVとなります。
そして、サイトの状態の各要素の性質ですが、以下のように定義してみました。
- サイト評価は記事の話題性を上げる
- 有名なサイトほど、記事は高く評価されます
- 記事の話題性はサイト評価を上げる
- よい記事を書いたサイトは評価が上がります
- 記事の話題性はサイト盛り上がり度を上げる
- よい記事が書かれれば、引用や紹介されることにより、サイトが盛り上がります
- サイト評価、記事の話題性、サイトの盛り上がり度は時間の経過と共に減少する
- 放置されたサイトは忘却されます。それと同じです。
まずは検索エンジンが存在しないものとして考えてみました。
そうすると、常微分方程式は以下のように書けます。
a〜gについては後で適当な数値を入れてみます。以上をまとめると、
と書くことができます。
scilabで実行してみます。
A = [-1,1,0,0;1,-2,0,0;0,5,-1,0;0,0,0,0] B = [0;1;0;0] C = [1,1,1,0] S1=syslin('c',A,B,C); t=0:0.1:10; deff("y=none(x)","y=0"); x1 = [0;100;0;0]; [y1,z1] = csim(none,t,S1,x1); a = z1(1,:); b = z1(2,:); c = z1(3,:); clf(); plot(t,y1,'ro-') plot(t,a,'bo-') plot(t,b,'go-') plot(t,c,'ko-')
赤色がPVです。確かに、記事を一回投稿して後放置だと確かにこんな曲線描きますね。
様々なサイトの状態を比べてみました。
A = [-1,1,0,0;1,-2,0,0;0,5,-1,0;0,0,0,0] B = [0;1;0;0] C = [1,1,1,0] S1=syslin('c',A,B,C); t=0:0.1:10; deff("y=none(x)","y=0"); x1 = [0;100;0;0]; x2 = [100;100;0;0]; x3 = [0;100;100;0]; x4 = [100;100;100;0]; y1 = csim(none,t,S1,x1); y2 = csim(none,t,S1,x2); y3 = csim(none,t,S1,x3); y4 = csim(none,t,S1,x4); clf(); plot(t,y1,'ro-') plot(t,y2,'bo-') plot(t,y3,'go-') plot(t,y4,'ko-')
サイトの評価が全くない赤とある青とでは、PVが倍ぐらい違うこともさることながら、サイトの評価がある青の方がPVの山が長いですね。
盛り上がっているサイトでは、評価高いサイトに太刀打ちできていません。これは単なる係数の問題だとは思うんですけどね。
検索エンジンを考慮して、以下の性質を追加してみます。
- 記事の知識量は記事の話題性を上げる
- 知識を与える記事ほど、記事は高く評価されます
- 記事の知識量は時間の経過とともに減少することはない
- 検索エンジンで記事を探す場合、1年前とかの記事に辿りつくこともあります。時間の経過とともに知識量が減ることは全くないか、あったとしても減少速度は遅いでしょう。
を再定義してみます。
A = [-1,1,0,0;1,-2,0,1;0,5,-1,0;0,0,0,0] B = [0;1;0;0] C = [1,1,1,0] S1=syslin('c',A,B,C); t=0:0.1:20; deff("y=none(x)","y=0"); x1 = [100;100;0;5]; [y1,z1] = csim(none,t,S1,x1); a = z1(1,:); b = z1(2,:); c = z1(3,:); clf(); plot(t,y1,'ro-') plot(t,a,'bo-') plot(t,b,'go-') plot(t,c,'ko-')
最初のグラフより、山が長くなっているのが判ります。そして、最終的に0にならず、ある定数で安定しています。
Webサイトが得るPVの動きを上手く再現出来てると思うんですが、どう思いますか?