Sequence Rules
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> |