携帯音楽プレイヤーのランダム再生の品質向上案

iPod shuffleの一つ前の型を使っている。
これ、小さくてどこでも使えていいんだけど、いくつか問題点がある。
その中でランダム再生機能について書いてみる。
ランダム再生機能とは、入っているすべての曲の中からランダムに曲を選択して再生してくれるもの。
この再生内容は今のところ洗練させておらず、ぜんぜん聞きたくない曲がかかったり、何度も同じ曲がかかって飽きてしまうことがある。
これを何とかして品質を向上できないか、というのかこのエントリの趣旨。
結論的には可能であると考えている。

なぜ可能か

理由は二つある。
一つにはiPod shuffleの場合には必ずPCに接続する運用になっているからだ。
PCに接続すればかなり複雑な処理であろうとも十分に実行可能。
第二にはユーザの操作履歴が延々と残り続けるということ。
統計情報をユーザの挙動を解析するための手がかりにすることができる。
そしてある程度の年齢を過ぎると音楽の好みは長年に渡ってそれほど大きく変化しない。
自分は20年前の音楽を今でも聴いている。
つまり操作履歴が統計情報として安定的な内容となるはずであるということ。

どのようにユーザーの動作を解析できるのか

ユーザーが今聴いているスキップする動作がある。
この操作を主な統計対象とする。
iPod shuffleの場合はできる操作が非常に限られているため、基本的には特定の曲を選んで聴くことはできない。
ユーザーからの信頼できる入力はスキップと音量調節だ。

スキップ操作から取り出すことができる情報

単純に考えると、スキップしたのであれば、ユーザーは今この瞬間にその曲をこれ以上聴きたくないと考えている。
つまり当該曲の評価を下げることができる。
評価の下がった曲の再生頻度は今後は低下する。
「当該曲がユーザーにとってあまり好みではない」という判断となる。
だが、実はスキップしたときに単に「その曲が嫌い」なのではないかもしれない。
どんな場合でも必ずスキップするのであれば、「その曲が嫌い」なのかもしれないが、ほとんどの場合はそうではない。(そもそも完全に嫌いな曲であれば登録しない)スキップする場合としない場合があって、ユーザーの挙動に波があるようならば単純に評価を下げるのは誤りだ。
そこにはきっと何らかの規則性があるに違いない。
考えられるのは下記のようなケース。
S1、当該曲そのものは好きなのだが、近い過去に何度も再生されたため、聴きたくなくなってしまった
S2、直前に再生された曲との相性が悪い。
S3、時刻の問題。夜間など遅い時間にアップテンポの曲がかかってしまった場合など。
S4、環境の問題。周辺環境が非常にうるさいのに、低音量の曲がかかった場合など。
S5、気分の問題。そのとき聴きたい気分ではない音楽がかかってしまった。
ユーザーの事情や気分を検出する必要がある。
これらをどうやって検出するべきだろうか?
順に考えてみる。

S1、当該曲そのものは好きなのだが、近い過去に何度も再生されたため、聴きたくなくなってしまった

スキップしたときに、その曲が近い過去に何度も再生されていたかどうかを調べる。
もしも、何度も再生されていたのであれば、ユーザは当該曲に飽き始めていると考えてよい。
しばらくの間は当該曲を再生しないほうがよい。

そして、もしも複数の高頻度曲についてスキップしているようであれば、
「高頻度再生曲群そのもの」に飽きている可能性がある。
全体の再生ロジックを低頻度再生曲にフォーカスさせるべき。
今まで一度も再生されていない曲や、再生頻度の非常に低い曲を優先的に再生させるべきだ。

S2、直前に再生された曲との相性が悪い。

簡単に解析するには、「特定の曲の次にかかった場合にスキップされているかどうか」を調査すればよい。
明確なパターンがある場合には、その順番で再生しないようにする。
ただし、このためには膨大な統計情報が必要なので、数年以上の連続的な運用が前提。

S3、時刻の問題。夜間など遅い時間にアップテンポの曲がかかってしまった場合など。

これは実に簡単な解析。
当該曲が一定の時刻にスキップされるようであれば、
その時刻にかけるべき曲ではないということだ。

S4、環境の問題。周辺環境が非常にうるさいのに、低音量の曲がかかった場合など。

これをスキップ情報から検出するのは難しい。音量操作から情報を取り出すことができるので、後述する。

S5、気分の問題。そのとき聴きたい気分ではない音楽がかかってしまった。

これはそのときどういった曲をスキップして、どういった曲を聴くかによって判断できる。
もしもスローな曲がスキップされるようであれば、ノリのよい曲をかける。

→特定のスキップパターンがあるはずであるということ。
ある曲がスキップされるときには、同じようにスキップされる曲が存在するはず。
同じタイミングでスキップされる曲群をグルーピングして、特定の曲群に属する曲がスキップされた場合には
「その気分ではない」と判断して、同一曲群に属する曲を再生しないようにする。
曲の先頭でスキップするか、途中でスキップするかによっても重み付けを変えることができる。


音量操作から取り出すことのできる情報

例えば、低音量で聴き取りにくい曲がかかった場合には、ユーザーは音量を上げる操作を行うと思われる。
音量を上げる操作を行うのは主に四種類の理由がある。
V1、当該曲の音量が低い
V2、大音量で聴くべき曲
V3、大音量で聴きたい気分である
V4、周辺環境がうるさい

V1、当該曲の音量が低い

当該曲をかける場合に音量を上げる操作を行う頻度が高ければ、当該曲の音量が低いものと考えられる。
(本来これは曲の再生音量を自動的に上げるべきだが)

V2、大音量で聴くべき曲

特定の曲だけが大音量で聴かれる場合には当該曲は「適大音量曲」として認識する。
(当該曲の音量が低いケースとは最大音量で区別する)

V3、大音量で聴きたい気分である

「特定の音量範囲の場合のスキップ傾向」というものが存在するはず。
音量とスキップの関連性によって最適な曲を選択できる。
大音量に設定している場合にはノリのいい曲、低音量に設定している場合にはバラードを選択する、など。

V4、周辺環境がうるさい

ボリュームを大きく設定しているが、普段には大音量で聴かない曲についても大音量で聴いていたり、
すべての曲について一定以上であるならば周辺環境がうるさいものとして考えてよい。
大音量に設定してありながら、曲が変わっても特に音量を操作しないケースなど。

大音量について書いたが、低音量についてもほぼ同じ論理を適用できる。
当該曲の音量が高い、低音量で聴くべき曲、低音量で聴きたい気分、周辺環境が静か、など。

選曲の成功評価

上記の論理によって選曲するのだが、結果として選んだ曲がスキップされてしまうケースがあると考えられる。
その場合には選曲のために大きく作用した論理の優先度合いを下げる必要がある。
長期間の使用によって最適な論理バランスが作られる。
もしも長期間使用しても論理バランスが安定せず、スキップ頻度が変化しないようであれば論理を見直す必要がある。
スキップ頻度が改善されない場合はオンラインで開発側に報告されるべきだろう。

まとめ

長期間一定の操作を行う場合は、それ自体が有用な統計情報となる。
たとえユーザーがまったくコンピュータのことに詳しくなくとも、特に意識をしなくとも
統計情報さえあれば、個別に最適な設定が行われるようなシステムを作ることが可能。
システムに無意識なユーザーに対して満足度を向上させることができる。
[rakuten:plusyu:10247101:detail]
↑今買うならこれだろう。
[rakuten:kaden-ookoku:10031986:detail]
↑自分が持っているのはこれ