本發(fā)明涉及計(jì)算機(jī)技術(shù)應(yīng)用領(lǐng)域,具體是基于Spark Streaming廣告點(diǎn)擊異常檢測系統(tǒng)及檢測方法。
背景技術(shù):
隨著數(shù)據(jù)爆發(fā)式的增長,大數(shù)據(jù)的時代已來臨,安全、快速、實(shí)時、高效的數(shù)據(jù)處理,不僅能夠讓企業(yè)提前規(guī)避風(fēng)險(xiǎn),而且能夠及時提供數(shù)據(jù)信息為企業(yè)發(fā)展,產(chǎn)品生產(chǎn)和開發(fā)提供真實(shí)有效的依據(jù)。
然而,由于網(wǎng)絡(luò)具有開放性,在方便大眾的同時也帶來了信息不真實(shí)、惡意訪問、惡意攻擊等。這是各個開放網(wǎng)站都面臨的問題,怎樣防止這些問題,怎樣提取真實(shí)有效數(shù)據(jù),減輕服務(wù)器惡意荷載是各個開放性網(wǎng)站的研究重點(diǎn)。其中投放廣告的惡意點(diǎn)擊就是一種典型問題,及時掌握異常數(shù)據(jù)阻止惡意點(diǎn)擊,獲得有效的廣告點(diǎn)擊數(shù)據(jù),對開放性網(wǎng)站的合理收費(fèi)提供依據(jù),能夠有效改善服務(wù)器負(fù)載,為投放廣告商戶提供合理的商業(yè)規(guī)劃和業(yè)務(wù)指導(dǎo)具有重要意義。當(dāng)下的處理技術(shù),一般是基于離線批處理,這樣的處理技術(shù)不能實(shí)時的解決線上問題,對某些需快速決策方案無法快速給出理論依據(jù)。對于實(shí)時型系統(tǒng)如:Storm,它雖然具備實(shí)時處理數(shù)據(jù)的能力,但是在數(shù)據(jù)安全性和大批量的數(shù)據(jù)處理上效果表現(xiàn)弱于Spark Streaming。Spark是一個類似于MapReduce的分布式計(jì)算框架,其核心是彈性分布式數(shù)據(jù)集,提供了比MapReduce更豐富的模型,可以在快速在內(nèi)存中對數(shù)據(jù)集進(jìn)行多次迭代,以支持復(fù)雜的數(shù)據(jù)挖掘算法和圖形計(jì)算算法。Spark Streaming是一種構(gòu)建在Spark上的實(shí)時計(jì)算框架,它擴(kuò)展了Spark處理大規(guī)模流式數(shù)據(jù)的能力。
Spark Streaming的優(yōu)勢在于:
·能運(yùn)行在100+的結(jié)點(diǎn)上,并達(dá)到毫秒級延遲。
·使用基于內(nèi)存的Spark作為執(zhí)行引擎,具有高效和容錯的特性。
·能集成Spark的批處理和交互查詢。
·為實(shí)現(xiàn)復(fù)雜的算法提供和批處理類似的簡單接口。
所以基于以上問題,結(jié)合現(xiàn)有的Spark大數(shù)據(jù)計(jì)算框架,及強(qiáng)大的電腦硬件支撐,合理的機(jī)器學(xué)習(xí)算法,能夠快速、高效、精準(zhǔn)的解決此類問題。
本發(fā)明的一個目的就是提供基于Spark Streaming廣告點(diǎn)擊異常檢測系統(tǒng),它可以對投放于用戶端的廣告點(diǎn)擊異常進(jìn)行分析過濾,及時掌握有效廣告點(diǎn)擊情況,合理有效的廣告投放計(jì)費(fèi),分析異常數(shù)據(jù)的行為和特征,更有助于分析用戶行為和興趣,為廣告投放商提供商業(yè)規(guī)劃,產(chǎn)品合理性等起到了事實(shí)依據(jù),預(yù)測市場未來行情等。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明旨在解決以上現(xiàn)有技術(shù)的問題。提出了一種能夠快速、高效、精準(zhǔn)的為廣告投放商提供商業(yè)規(guī)劃、產(chǎn)品合理性等起到了事實(shí)依據(jù)、預(yù)測市場未來行情的基于Spark Streaming的廣告點(diǎn)擊異常檢測系統(tǒng)及檢測方法。本發(fā)明的技術(shù)方案如下:
一種基于Spark Streaming的廣告點(diǎn)擊異常檢測系統(tǒng),其包括數(shù)據(jù)采集單元、數(shù)據(jù)清洗單元、分布式數(shù)據(jù)消息系統(tǒng)、第一異常數(shù)據(jù)檢測單元、嫌疑數(shù)據(jù)提取單元、正常數(shù)據(jù)和異常數(shù)據(jù)分類器以及分類數(shù)據(jù)數(shù)據(jù)庫單元;其中
數(shù)據(jù)采集單元,用于采集用戶點(diǎn)擊廣告的日志信息;
數(shù)據(jù)清洗單元,對數(shù)據(jù)采集單元采集到的日志進(jìn)行清洗及標(biāo)準(zhǔn)化處理,最后將標(biāo)準(zhǔn)化后的數(shù)據(jù)發(fā)送到分布式數(shù)據(jù)消息系統(tǒng)中,等待被消費(fèi);
分布式數(shù)據(jù)消息系統(tǒng),主要存儲數(shù)據(jù)標(biāo)準(zhǔn)后的數(shù)據(jù),還存儲嫌疑數(shù)據(jù)提取單元發(fā)送來的的嫌疑數(shù)據(jù),生成Spark Streaming所需消費(fèi)的主題數(shù)據(jù),不同的數(shù)據(jù)生成各自Topic;
第一異常數(shù)據(jù)檢測單元,采用了KNN算法對來自于分布式消息系統(tǒng)(3)中的數(shù)據(jù)在Spark Streaming中進(jìn)行準(zhǔn)實(shí)時處理,得到嫌疑數(shù)據(jù)、異常數(shù)據(jù)、正常數(shù)據(jù);
嫌疑數(shù)據(jù)提取單元,主要用于對第一異常數(shù)據(jù)檢測單元單元產(chǎn)生的嫌疑數(shù)據(jù)發(fā)送回分布式數(shù)據(jù)消息系統(tǒng)中;
正常數(shù)據(jù)和異常數(shù)據(jù)分類器,采用了樸素貝葉斯分類方法,對存儲于分布式消息系統(tǒng)的嫌疑數(shù)據(jù)進(jìn)行分類,得到異常數(shù)據(jù)和正常數(shù)據(jù);
分類數(shù)據(jù)數(shù)據(jù)庫單元,包括括MySQL數(shù)據(jù)庫和Redis內(nèi)存數(shù)據(jù)庫,其中MySQL數(shù)據(jù)庫用于存儲正常數(shù)據(jù)和異常數(shù)據(jù)分類器產(chǎn)生的正常數(shù)據(jù)和異常數(shù)據(jù),并將異常數(shù)據(jù)映射給Redis內(nèi)存數(shù)據(jù)庫,便于快速訓(xùn)練樸素貝葉斯分類器,Redis為內(nèi)存數(shù)據(jù)庫,只是用于映射MySQL數(shù)據(jù)庫,便于提高查詢和修改的速度,設(shè)定一定周期內(nèi)將數(shù)據(jù)寫入到MySQL,便于永久保存。簡而言之,Redis為一個中間件,為了提高速度而已。
進(jìn)一步的,所述Redis內(nèi)存數(shù)據(jù)庫還包括將存儲的異常數(shù)據(jù)用于進(jìn)行訓(xùn)練的樸素貝葉斯分類器。
進(jìn)一步的,所述數(shù)據(jù)采集單元采集用戶點(diǎn)擊廣告的日志信息的設(shè)備為日志采集器Flume(分布式日志收集系統(tǒng)),分布式數(shù)據(jù)消息系統(tǒng)為Kafka。
進(jìn)一步的,所述第一異常數(shù)據(jù)檢測單元(4)采用了KNN算法的KNN函數(shù)為:
x為一條待分類日志的向量表示,di為訓(xùn)練集中的一條實(shí)例日志向量表示,cj為一類別;它們的相似度使用余弦相似度,待分類日志和實(shí)例日志的相似度為:
進(jìn)一步的,KNN算法中,KNN分類器點(diǎn)擊的有效性包括五個向量,第一個是“相同IP在一段時間內(nèi)的點(diǎn)擊數(shù)很多則異常”,第二個是“點(diǎn)擊IP在廣告頁面的停留時間幾乎可以忽略則異?!?,第三個是“點(diǎn)擊IP對于廣告訪問時刻異常的別于正常的人為活動時間”,第四個是“相同IP段不同地址訪問同步性多次相似則異?!?,第五是“對于IP行為和關(guān)注廣告異常別于這個IP的以往行為和興趣則嫌疑”,對這些樣本數(shù)據(jù)對KNN進(jìn)行訓(xùn)練,得到KNN分類器。
進(jìn)一步的,所述樸素貝葉斯函數(shù)為:
其中d為屬性數(shù)目,xi為x在第i個屬性上的取值。
通過映射于Redis的異常數(shù)據(jù)為樣本,訓(xùn)練該分類器,在一個周期內(nèi)如:一周,就利用隨機(jī)提取的20%的異常數(shù)據(jù)重新訓(xùn)練更新樸素貝葉斯分類器。
一種基于Spark Streaming的廣告點(diǎn)擊異常檢測方法,其包括以下步驟:
1)用Flume(分布式日志收集系統(tǒng))采集網(wǎng)站用戶的廣告點(diǎn)擊日志;
2)對步驟1)Flume采集到數(shù)據(jù)進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理,然后再由Flume將標(biāo)準(zhǔn)化數(shù)據(jù)發(fā)送到Kafka消息系統(tǒng)中,將這類原始的數(shù)據(jù)定義為Topic1,Topic1表示等待被消費(fèi)數(shù)據(jù),即相當(dāng)于定義此類數(shù)據(jù)的地址;
3)對步驟2)中等待被消費(fèi)數(shù)據(jù)Topic1,通過Spark Streaming準(zhǔn)實(shí)時計(jì)算框架在KNN算法下進(jìn)行分類;
4)根據(jù)步驟3)生成的嫌疑數(shù)據(jù)、異常數(shù)據(jù)、正常數(shù)據(jù),將嫌疑數(shù)據(jù)發(fā)送回Kafka中定義為Topic2,其余數(shù)據(jù)保存于Redis內(nèi)存數(shù)據(jù)庫中,然后將這些數(shù)據(jù)寫入MySQL數(shù)據(jù)庫中,實(shí)現(xiàn)MySQL的讀寫分離;
5)根據(jù)步驟4)將Redis中隨機(jī)提取于MySQL數(shù)據(jù)庫中的20%的異常數(shù)據(jù)訓(xùn)練樸素貝葉斯分類器,然后將Kafka中的Topic2通過Spark Streaming準(zhǔn)實(shí)時計(jì)算框架在樸素貝葉斯算法下進(jìn)行分類。
進(jìn)一步的,所述步驟3)中KNN算法為:將訓(xùn)練樣本作為參考點(diǎn),計(jì)算測試樣本與訓(xùn)練樣本的距離,采用歐氏距離,得到距離中最近的值作為分類的依據(jù)。
進(jìn)一步的,步驟2)中所述KNN算法的歐氏距離的公式為:
x和y表示差異個體,分別有n維特征。
本發(fā)明的優(yōu)點(diǎn)及有益效果如下:
本發(fā)明通過Flume采集用戶端投放廣告點(diǎn)擊數(shù)據(jù),對數(shù)據(jù)進(jìn)行清洗標(biāo)準(zhǔn)化,F(xiàn)lume對標(biāo)準(zhǔn)化后的數(shù)據(jù)發(fā)送到分布式消息系統(tǒng)Kafka中,等待訂閱被消費(fèi)生成Topic1,利用大數(shù)據(jù)準(zhǔn)實(shí)時流數(shù)據(jù)Spark Streaming計(jì)算框架結(jié)合KNN分類算法,將數(shù)據(jù)分類為嫌疑數(shù)據(jù)、異常和正常數(shù)據(jù),然后將嫌疑數(shù)據(jù)發(fā)送回Kafka中生成Topic2,同樣利用大數(shù)據(jù)準(zhǔn)實(shí)時流數(shù)據(jù)Spark Streaming計(jì)算框架結(jié)合樸素貝葉斯分類算法,將嫌疑數(shù)據(jù)生成的Topic2進(jìn)行分類,得到異常數(shù)據(jù)和正常數(shù)據(jù)。在這些過程最終分類保存在Redis中,然后存儲于MySQL數(shù)據(jù)庫中,實(shí)現(xiàn)數(shù)據(jù)庫的讀寫分離,增加讀寫速度。
附圖說明
圖1是本發(fā)明提供優(yōu)選實(shí)施例的結(jié)構(gòu)示意圖;
圖2為Spark Streaming下的KNN分類流程圖;
圖3為Spark Streaming下的樸素貝葉斯分類流程圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、詳細(xì)地描述。所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例。
本發(fā)明的技術(shù)方案如下:
如圖1所示,一種基于Spark Streaming的廣告點(diǎn)擊異常檢測系統(tǒng),其特征在于,包括數(shù)據(jù)采集單元1、數(shù)據(jù)清洗單元2、分布式數(shù)據(jù)消息系統(tǒng)3、第一異常數(shù)據(jù)檢測單元4、嫌疑數(shù)據(jù)提取單元5、正常數(shù)據(jù)和異常數(shù)據(jù)分類器6以及分類數(shù)據(jù)數(shù)據(jù)庫單元;其中
數(shù)據(jù)采集單元1,用于采集用戶點(diǎn)擊廣告的日志信息;
數(shù)據(jù)清洗單元2,對數(shù)據(jù)采集單元1采集到的日志進(jìn)行清洗及標(biāo)準(zhǔn)化處理,最后將標(biāo)準(zhǔn)化后的數(shù)據(jù)發(fā)送到分布式數(shù)據(jù)消息系統(tǒng)3中,等待被消費(fèi);
分布式數(shù)據(jù)消息系統(tǒng)3,主要存儲數(shù)據(jù)標(biāo)準(zhǔn)后的數(shù)據(jù),還存儲嫌疑數(shù)據(jù)提取單元發(fā)送來的的嫌疑數(shù)據(jù),生成Spark Streaming所需消費(fèi)的主題數(shù)據(jù),不同的數(shù)據(jù)生成各自Topic;
第一異常數(shù)據(jù)檢測單元4,采用了KNN算法對來自于分布式消息系統(tǒng)3中的數(shù)據(jù)在Spark Streaming中進(jìn)行準(zhǔn)實(shí)時處理,得到嫌疑數(shù)據(jù)、異常數(shù)據(jù)、正常數(shù)據(jù);
嫌疑數(shù)據(jù)提取單元5,主要用于對第一異常數(shù)據(jù)檢測單元4單元產(chǎn)生的嫌疑數(shù)據(jù)發(fā)送回分布式數(shù)據(jù)消息系統(tǒng)3中;
正常數(shù)據(jù)和異常數(shù)據(jù)分類器6,采用了樸素貝葉斯分類方法,對存儲于分布式消息系統(tǒng)3的嫌疑數(shù)據(jù)進(jìn)行分類,得到異常數(shù)據(jù)和正常數(shù)據(jù);
分類數(shù)據(jù)數(shù)據(jù)庫單元,包括括MySQL數(shù)據(jù)庫7和Redis內(nèi)存數(shù)據(jù)庫8,其中MySQL數(shù)據(jù)庫7用于存儲正常數(shù)據(jù)和異常數(shù)據(jù)分類器6產(chǎn)生的正常數(shù)據(jù)和異常數(shù)據(jù),并將異常數(shù)據(jù)映射給Redis內(nèi)存數(shù)據(jù)庫,便于快速訓(xùn)練樸素貝葉斯分類器,Redis為內(nèi)存數(shù)據(jù)庫,只是用于映射MySQL數(shù)據(jù)庫,便于提高查詢和修改的速度,設(shè)定一定周期內(nèi)將數(shù)據(jù)寫入到MySQL,便于永久保存。簡而言之,Redis為一個中間件,為了提高速度而已。
圖2為Spark Streaming下的KNN分類流程圖。
圖3為Spark Streaming下的樸素貝葉斯分類流程圖。
KNN分類器對標(biāo)準(zhǔn)化后存儲于Kafka中的Topic1數(shù)據(jù)進(jìn)行分類,生成嫌疑數(shù)據(jù)(KNN無法分類數(shù)據(jù)),正常數(shù)據(jù)和異常數(shù)據(jù),并將生成的正常數(shù)據(jù)和異常數(shù)據(jù)存儲于數(shù)據(jù)庫中,將嫌疑數(shù)據(jù)發(fā)送回Kafka中生成Topic2等待樸素貝葉斯分類器的分類,樸素貝葉斯分類器通過KNN分類后的異常數(shù)據(jù)進(jìn)行訓(xùn)練,通過結(jié)合大數(shù)據(jù)Spark Streaming的超強(qiáng)計(jì)算能力,使計(jì)算變得更快,結(jié)果變得更精確,最后存儲分類后的數(shù)據(jù)。
本發(fā)明在網(wǎng)頁用戶點(diǎn)擊廣告后,實(shí)時過濾異常數(shù)據(jù),并分析提取異常數(shù)據(jù)特征和行為,收集正常數(shù)據(jù),合計(jì)計(jì)算廣告投放費(fèi)用,分析用戶行為和興趣,為廣告投放企業(yè)制定商業(yè)策劃,預(yù)測市場未來行情等。通過KNN的第一次分類達(dá)到三分類,嫌疑數(shù)據(jù)、異常數(shù)據(jù)和正常數(shù)據(jù),然后通過異常數(shù)據(jù)對樸素貝葉斯進(jìn)行訓(xùn)練,對嫌疑數(shù)據(jù)進(jìn)行精確的劃分,以達(dá)到數(shù)據(jù)的合理性,異常數(shù)據(jù)和正常數(shù)據(jù),相關(guān)數(shù)據(jù)和非相關(guān)數(shù)據(jù)能夠有力的為精確數(shù)據(jù)挖掘和預(yù)測分析提供保障。
以上這些實(shí)施例應(yīng)理解為僅用于說明本發(fā)明而不用于限制本發(fā)明的保護(hù)范圍。在閱讀了本發(fā)明的記載的內(nèi)容之后,技術(shù)人員可以對本發(fā)明作各種改動或修改,這些等效變化和修飾同樣落入本發(fā)明權(quán)利要求所限定的范圍。