Sequence Rules

基礎的なデータ・モデルは、シーケンス・オブジェクトから成ります。シーケンス・オブジェクトは、それによって引き起こされる事象の数をもつ「プライマリー・キー(主キー)」によって識別され、「セカンダリー・キー」によって定義される。各々の事象は、順序付けられたアイテムの集合からなります。「順序フィールド(Order Field)」は、属性名の形式においてオプションのqualifierで、事象内のアイテムの順序を定義する。

SequenceModel

シーケンスマイニングモデルはいくつかの大きなパーツから成ります:


<!ELEMENT SequenceModel (Extension*, MiningSchema, Item*, Itemset*, 
			SetPredicate*, Sequence+, 
			SequenceRule*, Extension*)>
<!ATTLIST SequenceModel
  modelName 				CDATA 		#IMPLIED
  functionName 				%MINING-FUNCTION; #REQUIRED
  algorithmName 			CDATA 		#IMPLIED
  numberOfTransactions 			%INT-NUMBER; 	#REQUIRED
  maxNumberOfItemsPerTransaction 	%INT-NUMBER; 	#IMPLIED
  avgNumberOfItemsPerTransaction 	%REAL-NUMBER; 	#IMPLIED
  minimumSupport 			%REAL-NUMBER; 	#REQUIRED
  minimumConfidence 			%REAL-NUMBER; 	#REQUIRED
  lengthLimit 				%INT-NUMBER; 	#IMPLIED
  numberOfItems 			%INT-NUMBER; 	#REQUIRED
  numberOfSets 				%INT-NUMBER; 	#REQUIRED
  numberOfSequences 			%INT-NUMBER; 	#REQUIRED
  numberOfRules 			%INT-NUMBER; 	#REQUIRED
  timeWindowWidth 			%INT-NUMBER; 	#IMPLIED
  minimumTime 				%INT-NUMBER; 	#IMPLIED
  maximumTime 				%INT-NUMBER; 	#IMPLIED
>

Extension(拡張)は、モデルの内容を拡張する能\力を提供します。

MiningSchemaは、このモデルの中で使用されるフィールドをリストします。これは、データ・ディクショナリーおよびtransformation dictionaryに定義されるようなフィールドの部分集合です。transformation dictionary中のtransformationは、モデルで使う新しいフィールドを与えて、データ・ディクショナリー中のDataField値の一つに対して実行される。

ItemはAssociationモデルに定義されます。

ItemsetはAssociationモデルに定義されます。

SetPredicateは単純なブール表\現(simple boolean expressions)で述語の集合です。

Sequence(シーケンス)SetPredicatesかItemsetsの順序づけられたコレクションです。少なくとも1つのシーケンスがあるでしょう。

SequenceRuleは、2つのシーケンスの関係を記述します。

属性記述(Attribute description):

numberOfTransactions:データ中のオブジェクトの数。 (例えば一意の顧客あるいはビジターの数)

maxNumberOfItemsPerTransaction:オブジェクト当たり事象(events)(例えば訪問)の最大の数。

avgNumberOfItemsPerTransaction:オブジェクトを構\築する事象の平均数。

minimumSupport:シーケンスの発見に対する最小のサポート。

minimumConfidence:規則の発見に対する最小の確信(confidence)。

lengthLimit:発見されるシーケンスの最大の長さ。

numberOfItems:一意なアイテム(例えばサイト上のページ)の総数。

numberOfSets:集合の総数。

numberOfSequences:発見されたシーケンスの総数。

numberOfRules:発見された規則の総数。

timeWindowWidth:これはオブジェクトと関係するアイテムを離散事象へと分けるのに使われるでしょう。しかし、それは、分ける事象に対する明確なキーが存在しない場合のみである。二つの連続したアイテムは、同じ事象の一部と見なされるこの値より小さな、時間のギャップを持つべきである。

minimumTime:上に定義されるようなアイテム間の最小の時間。

maximumTime:上に定義されるようなアイテム間の最大の時間。

SetPredicate


<!ENTITY % ELEMENT-ID 	"CDATA">

<!ELEMENT SetPredicate ( %STRING-ARRAY; )>
<!ATTLIST SetPredicate
	id 		%ELEMENT-ID; 		#IMPLIED
	field 		%FIELD-NAME; 		#REQUIRED
	operator 	CDATA 			#FIXED "supersetOf"
>

<!ELEMENT ItemSetReference EMPTY>
<!ATTLIST ItemSetReference 
	itemSetId 	%ELEMENT-ID; 		#REQUIRED
>

SetPredicate要素はブール表\現から成ります。これは、フィールド、比較オペレーターおよび値から構\成されます。値(s)は、配列の形をして書かれるでしょう。

属性記述(Attribute description)

id:一意に述語集合を識別する要素ID。(setIdによってシーケンス中で参照される。)

field:述語ステートメントのsubject。通常、この名前は、TransformationDictionaryの中のDerivedField要素のうちの1つを参照します。

operator:述語ステートメントのsubjectと値の配列の間のassociation。

SetPredicateは2つの集合を比較し、一方で、SimpleSetPredicte(決定木モデルで定義されたように)が、一つの集合の中の単一の値のmembershipをチェックすることに注意しましょう。


デリミッター&タイム(Delimiter & Time)


<!ENTITY % DELIMITER   "( sameTimeWindow | acrossTimeWindows )">
<!ENTITY % GAP         "( true | false | unknown )">

<!ELEMENT Delimiter EMPTY>
<!ATTLIST Delimiter
  delimiter   		%DELIMITER; 	#REQUIRED
  gap         		%GAP;        	#REQUIRED
>

Delimiter(デリミッター)はシーケンスの2つの集合間の、あるいはSequenceRuleの中の2つのシーケンス間の分離です。

属性記述(Attribute description):

delimiter(デリミッター):このSetPredicateが、同じ事象もしくは時間間隔(time period)内で起こったかどうかを述べる。時間ウィンドウ(TimeWindow)(例えばセッション)によって前の(previous)ものと同じように定義される。

gap(ギャップ):現時点(this)と前の(previous)集合もしくはシーケンスとの間のSetPredicatesの可能\存在(possible existence)。Trueは、シーケンスの間のギャップを許す(未知のやり方で)、開いたシーケンスをあらわす。閉じたシーケンスにおいて、記述されている二つの集合もしくはシーケンスがデータ中の連続集合であることを示すことで、gapにはfalseがセットされる。


<!ELEMENT Time EMPTY>
<!ATTLIST Time
  min       %NUMBER;  #REQUIRED
  max       %NUMBER;  #REQUIRED
  mean      %NUMBER;  #IMPLIED
>

属性記述(Attribute description):

min:シーケンス中の集合の間(あるいは、規則中の前件(antecedent)シーケンスと後件(consequent)シーケンスの間)の最小の時間。

max:シーケンス中の集合の間(あるいは、規則中の前件(antecedent)シーケンスと後件(consequent)シーケンスの間)の最大の時間。

mean:シーケンス中の集合の間(あるいは、規則中の前件(antecedent)シーケンスと後件(consequent)シーケンスの間)の平均の時間。


Sequence(シーケンス)


<!ENTITY % FOLLOW_SET "(Delimiter, SetReference )" >

<!ELEMENT Sequence ( SetReference, (%FOLLOW_SET;)* )>
<!ATTLIST Sequence
  id               	%ELEMENT-ID;  	#REQUIRED
  numberOfSets      	%INT-NUMBER; 	#IMPLIED
  occurrence       	%INT-NUMBER; 	#IMPLIED
  support          	%REAL-NUMBER; 	#IMPLIED
>

各シーケンスはSetReferenceおよびオプションのFOLLOW_SET(s)から成ります。FOLLOW_SETはデリミッターによって先に来る別のSetReferenceです。

属性記述(Attribute description):

id:このシーケンスの一意なID。(seqIdによってSequenceRulesの中で参照される)。

numberOfSets:このシーケンス中のSetPredicatesおよび(または)ItemSetsの数。

occurrence:このシーケンスが真であるデータ中のオブジェクトの数。

support:このシーケンスが真であるデータ中のオブジェクトの数と、データ中の全オブジェクト数の比率。


<!ELEMENT SetReference EMPTY >
<!ATTLIST SetReference
	setId    	%ELEMENT-ID; 	#REQUIRED
>

SetReferenceは前に定義した集合を参照(もしくは指示)する。その集合は、SetPredicateあるいはItemset(それはItemRef要素を含むだろう)のいずれかになるだろう。

属性記述(Attribute description)

setId:SetPredicateかItemsetのid属性へのポインター。


シーケンス規則(Sequence Rules)


<!ELEMENT SequenceRule ( Extension*, AntecedentSequence, Delimiter, 
Time*, ConsequentSequence )>
<!ATTLIST SequenceRule
  id               %ELEMENT-ID;  #REQUIRED
  numberOfSets     %INT-NUMBER;  #REQUIRED
  occurrence       %INT-NUMBER;  #REQUIRED
  support          %REAL-NUMBER; #REQUIRED
  confidence       %REAL-NUMBER; #REQUIRED
>

SequenceRule(シーケンス規則)は、delimiter(デリミッター)とおそらくtime(時間)によって分けられる、前件シーケンスと後件シーケンスからなります。

属性記述(Attribute description):

id:このシーケンス規則の一意なID。

numberOfSets:前件および後件のシーケンスの両方の中の集合の総数。

occurrence:前提および必然のシーケンスが真であるデータ中のオブジェクトの数。

support:前提および必然のシーケンスが真であるデータ中のオブジェクトの数と、データ中のオブジェクトの総数の比率。

confidence:前件に続いて後件が起こる確率。シーケンスのoccurrenceの数を前件のoccurrenceの数で割ることで計算される。


前件&後件シーケンス(Antecedent & Consequent Sequences)


<!ENTITY % SEQUENCE "( SequenceReference, Time* )" >

<!ELEMENT SequenceReference EMPTY >
<!ATTLIST SequenceReference
  seqId    %ELEMENT-ID; #REQUIRED
>

<!ELEMENT AntecedentSequence (%SEQUENCE;) >
<!ELEMENT ConsequentSequence (%SEQUENCE;) >

属性記述(Attribute description):

seqId:前に定義されたシーケンスのid属性へのポインター。


下記の例は次のシナリオを表\わします:

{ index.html }から来る訪問者(Visitors)は(0.25のconfidenceで)次に行くでしょう:

同じ訪問中に{ offer.html, kdnuggets.com }を訪問し、他のサイトは訪れない;

二日以内に、彼らは、その間に他のサイトに立ち寄ることなく、{products.html}に戻ってくる;

前もって、少なくとも一つのサイトを訪れて、{ basket.html }を訪問する;

最後に、直接{ checkout.html }にいく。


<?xml version="1.0" ?>
<PMML version="2.0">
 <Header copyright="DMG.org" description="example model for sequences"/>
 <DataDictionary numberOfFields="4">
	<DataField name="visitor" optype="categorical"/>
	<DataField name="visit" optype="categorical"/>
	<DataField name="time" optype="categorical"/>
	<DataField name="page" optype="categorical"/>
 </DataDictionary>

 <TransformationDictionary>
	<DerivedField name="transaction"/>
	 <Aggregate field="page" function="multiset" groupField="visit"/>
	</DerivedField>
 </TransformationDictionary>

 <SequenceModel functionName="sequences"
	numberOfTransactions="100" minimumSupport="0.20"
	     minimumConfidence="0.25" numberOfItems="6"
	     numberOfSets="5" numberOfSequences="3" numberOfRules="1">

 <MiningSchema>
	<MiningField name="visitor" usageType="supplementary"/>
	<MiningField name="visit" usageType="active"/>
	<MiningField name="time" usageType="active">
	 <Extension name="unit" value="days"/>
	</MiningField>
	<MiningField name="page" usageType="active"/>
 </MiningSchema>

<!-- ========== Predicates ========== -->
<SetPredicate id="sp001" field="transaction" operator="supersetOf">
	<Array n="1" type="string"> index.html </Array>
</SetPredicate>

<SetPredicate id="sp002" field="transaction" operator="supersetOf">
	<Array n="2" type="string"> offer.html kdnuggets.com </Array>
</SetPredicate>

<SetPredicate id="sp003" field="transaction" operator="supersetOf">
	<Array n="1" type="string"> products.html </Array>
</SetPredicate>

<SetPredicate id="sp004" field="transaction" operator="supersetOf">
	<Array n="1" type="string"> basket.html </Array>
</SetPredicate>

<SetPredicate id="sp005" field="transaction" operator="supersetOf">
	<Array n="1" type="string"> checkout.html </Array>
</SetPredicate>

<!-- ========== Sequences ========== -->
<Sequence id="seq001" numberOfSets="1" occurrence="80" support="0.80">
	<SetReference setId="sp001"/>
</Sequence>

<Sequence id="seq002" numberOfSets="4" occurrence="40" support="0.40">
	<SetReference setId="sp002"/>
	<Delimiter delimiter="acrossTimeWindows" gap="false"/>
	<SetReference setId="sp003"/>
	<Delimiter delimiter="sameTimeWindow" gap="true"/>
	<SetReference setId="sp004"/>
	<Delimiter delimiter="sameTimeWindow" gap="false"/>
	<SetReference setId="sp005"/>
</Sequence>

<Sequence id="seq003" numberOfSets="5" occurrence="20" support="0.20">
	<SetReference setId="sp001"/>
	<Delimiter delimiter="sameTimeWindow" gap="unknown"/>
	<SetReference setId="sp002"/>
	<Delimiter delimiter="acrossTimeWindows" gap="false"/>
	<SetReference setId="sp003"/>
	<Delimiter delimiter="sameTimeWindow" gap="true"/>
	<SetReference setId="sp004"/>
	<Delimiter delimiter="sameTimeWindow" gap="false"/>
	<SetReference setId="sp005"/>
</Sequence>

<!-- ========== SequenceRules ========== -->
<SequenceRule id="rule001" numberOfSets="5" occurrence="20" 
		support="0.20" confidence="0.25">
	<Extension name="qWeight" value="0.5"/>
	<Extension name="attrWeight" value="0.5"/>
	<Extension name="seqWeight" value="0.5"/>

	<AntecedentSequence>
		<SequenceReference seqId="seq001"/>
	</AntecedentSequence>

	<Delimiter delimiter="sameTimeWindow" gap="unknown"/>
	<Time min="0" max="0"/>

	<ConsequentSequence>
		<SequenceReference seqId="seq002"/>
		<Time min="0" max="2"/> 
	<!-- time between "sp002" and "sp003" in sequence "seq002" -->
		<Time min="0" max="0"/>
	<!-- time between "sp003" and "sp004" in sequence "seq002" -->
		<Time min="0" max="0"/>
	<!-- time between "sp004" and "sp005" in sequence "seq002" -->
	</ConsequentSequence>

  </SequenceRule>

 </SequenceModel>
</PMML>