Showing posts with label Big Data. Show all posts
Showing posts with label Big Data. Show all posts

Kinh nghiệm làm việc với Big Data

Đã bao giờ bạn cảm thấy quá tải khi làm việc với Big Data chưa? Đã bao giờ bạn phải ngồi hàng giờ chỉ để transfer dữ liệu từ server này sang server khác chỉ để test thuật toán của mình? Hay những lúc chán chường khi nhìn script của mình bắt đầu chạy hàng giờ và cuối cùng phát hiện ra mình đã sai đâu đó? Mình nghĩ rằng tất cả những ai khi mới bắt đầu làm việc với Big Data đều có những cảm nhận như vậy. Trong bài viết này, tôi xin góp một chút kinh nghiệm của mình để làm việc với Big Data hiệu quả hơn, kể cả cá nhân hay làm việc nhóm.

Hãy lên plan thật tốt

Big Data decision
Big Data decision
Khi bắt đầu một dự án về Big Data, Project manager sẽ đối mặt với rất nhiều quyết định như nên lựa chọn hệ database nào cho phù hợp với bài toán đặt ra, phát triển trên ngôn ngữ lập trình gì để dễ dàng phát triển và bảo trì sau này. Khi chưa có nhiều kinh nghiệm, việc mắc sai lầm là điều tất yếu. Nhưng mấu chốt vấn đề vẫn là có được một plan thật tốt sẽ cứu sống dự án cũng như các thành viên của mình về sau.
Ví dụ, ở các công ty chuyên xử lý dữ liệu log và time series, thì dữ liệu sinh ra hàng giờ lên đến hàng Gigabytes là chuyện bình thường. Bài toán đặt ra gồm hai phần. Thứ nhất, làm thế nào để lưu trữ nhanh dữ liệu xuất phát từ nhiều nguồn về chung một nơi lưu trữ mà không bị mất mát thông tin. Thứ hai, làm sao có thể tổng hợp nhanh dữ liệu từ cấp độ phút sang giờ sang ngày để thực hiện phân tích dữ liệu.
Lúc này, Project manager sẽ đứng trước hai lựa chọn để lưu trữ và truy vấn nhanh thông tin:
  1. Sử dụng MongoDB và Java: các thành viên đã có kinh nghiệm về hai công nghệ này nên có thể phát triển ngay.
  2. Sử dụng Kafka và Spark: đây là công nghệ mới đáp ứng được nhu cầu của bài toán nhưng đòi hỏi thời gian cập nhật công nghệ và chưa có nhiều kinh nghiệm để phát triển.
Cuối cùng, do ưu tiên việc cho ra sản phẩm nhanh chóng cũng như tự tin với kinh nghiệm của đội nhóm hiên tại, Project manager đã quyết định chạy dự án trên MongoDB. Và đây là một quyết định chỉ đáp ứng được nhu cầu hiện tại nhưng về lâu dài sẽ gây ra nhiều rắc rối và phiền toái có thể dẫn đến thất bại của toàn bộ dự án.
Bên cạnh những ưu điểm của một NoSQL system đó là đảm bảo tính sẵn sàng của hệ thống, MongoDB có nhiều khuyết điểm không phù hợp cho phân tích real-time trên Big Data.
  • Cơ chế MapReduce (MR) chậm, khó lập trình phân tán trên nhiều server. Mặc dù có Aggregation thay thế cho MapReduce để cải thiện về tốc độ tổng hợp dữ liệu nhưng vẫn còn đó nhiều lỗi phát sinh liên quan đến quản lý bộ nhớ chưa được khắc phục.
  • Các phiên bản nâng cấp không tương thích ngược với các phiên bản trước đó. Dẫn đến nhiều khó khăn trong việc nâng cấp mã nguồn. Nhiều hàm sẽ bị loại bỏ và thay thế, ta khó có thể sử dụng lại được.
  • Database không có schema hay ràng buộc toàn vẹn, khiến cho dữ liệu có nhiều thông tin bị trùng lặp và không chính xác. Việc thực thi các phân tích số liệu dựa trên dữ liệu không toàn vẹn (invalid data) như thế này dẫn đến những sai sót không thể chấp nhận được.
  • Không thể chuyển qua sử dụng công nghệ khác. Hệ thống đã chạy và phát triển được một thời gian dài nên không thể đập bỏ hết và làm lại từ đầu. Điều này lại khiến cho việc bảo trì hệ thống về lâu dài không được đảm bảo, khó khăn trong việc kế thừa hệ thống.
Do vậy, nếu bạn lên plan tốt hơn thì đã chọn Kafka kết hợp với Spark để làm nền tảng phát triển. Việc nâng cấp và bảo trì cũng dễ dàng hơn. Đừng vì tính dễ sử dụng và thời gian phát triển nhanh mà đưa ra plan không tốt.

Nên rút data sample để thực nghiệm

Tasting soup
Tasting soup
Khi làm việc với Big Data, điểm khác biệt duy nhất đó là thời gian. Thời gian copy, thời gian chạy thuật toán, thời gian kiểm chứng, … đều kéo dài từ một đến nhiều tiếng thậm chí là vài ngày. Cách tốt nhất đó là hãy quyên chữ Big đi và rút trích ngay small sample để thực nghiệm, như vậy sẽ nhanh và dễ kiểm soát hơn.
Nhỏ ở đây có nghĩa là từ vài chục đến vài trăm dòng dữ liệu, có thể chạy trực tiếp và kiểm tra trên các phần mềm như Excel. Nhờ vậy, ta có thể kiểm tra được thuật toán của mình có chạy đúng hay không, và tự tin khi implement trên dữ liệu Big thật sự.
Cho nên, hãy rút trích ra các mẫu dữ liệu có thể quan sát được và thực nghiệm trên đó để đảm bảo tính đúng đắn. Ta có thể tư duy theo kiểu quy nạp từ tiền đề, giả thuyết, cho đến chứng minh tổng quát tính đúng đắn của dữ liệu.

Tập làm quen với debug

IntelliJ debugger
IntelliJ debugger
Trong giai đoạn thử việc, công ty đòi hỏi bạn phải hiểu mọi người đang làm gì, cụ thể là code của họ viết. Cách tốt nhất đó là học debug, đây thật sự là một kĩ năng cần thiết.
Khi mới vào công ty, tôi cũng không thích dùng debug tool cho lắm vì trong quá trình làm việc với Python tôi đã quen viết code tới đâu thì run tới đấy và debug tới đó trên dòng lệnh (command line), nhưng điều này chỉ khiến tôi chậm bước. Khi tiếp tục dự án của người khác, bạn sẽ khó có thể theo kịp logic flow nếu không debug. Nhờ có debug bạn sẽ hiểu được ý tưởng của chức năng này làm gì, tại sao lại có điều kiện này, tại sao xuất hiện biến kia. Từ đó, bạn có khả năng phát hiện ra các lỗi logic mà dự án đang gặp phải cũng như những điểm chưa tối ưu để có thể đưa ra các cải tiến cho hệ thống hiện tại.
Hãy chọn cho mình các tool debug thuận lợi cho công việc của bạn như Eclipse, Netbeans, intelli J, iPython, Robomongo, Pycharm,…

Đã làm về big data thì cần phải có nhiều server

MapReduce
Lập trình MapReduce với Python
Điều này nghe có vẻ vô lý, nhưng công ty làm về big data mà chỉ có một server thì nghe thật là nực cười.
Vấn đề ở đây đó là một server ngoài việc chịu tải về I/O còn chịu tải về xử lý và phân tích dữ liệu. Như vậy, hệ quả đó là hệ thống sẽ bị quá tải và trì trệ. Nhiều người nghĩ rằng có thể áp dụng Spark trên một server là đủ rồi. Xin thưa không bao giờ có chuyện đó. Spark là một công nghệ phụ thuộc rất nhiều vào RAM, càng nhiều RAM, càng nhiều server thì càng phát huy được thế mạnh của thuật toán để đáp ứng cho các ứng dụng real-time.
Hãy phân tán ra nhiều server vì MapReduce chạy trên một server chỉ làm tốn kém thêm tài nguyên hệ thống mà thôi.

Hãy viết document thật kỹ

Atlassian Confluence
Atlassian Confluence
Nếu bạn là lính mới và công ty có sẵn chương trình training thì bạn thật may mắn. Nhưng hầu hết các công ty start-up không làm điều này, nên dẫn đến nhiều khó khăn cho những người mới vào.
Document ở đây không chỉ là coding có comment đầy đủ mà là có đầy đủ tài liệu về thiết kế hệ thống, định nghĩa các chức năng và cách thức cài đặt. Nhờ có document mà ta sẽ hạn chế được rất nhiều trở ngại khi người cũ ra đi và người mới bước vào.
Hãy viết document cho những thiết kế về hệ thống ngay từ buổi ban đầu. Mô tả rõ các tác vụ của hệ thống, biểu diễn mạch lạc logic flow của chương trình, những phiên bản và những cập nhật hiện tại,…

Dữ liệu và công nghệ phải đồng bộ

Local Staging and Production
Local Staging and Production
Nếu bạn là một Freelancer thì công việc của bạn chỉ liên quan đến local và remote server. Mọi công đoạn phát triển, testing, debug đều được hoàn thành tại local sau đó mọi thay đổi sẽ được push lên remote server để ra phiên bản production. Tuy nhiên, với các dự án lớn như Big Data bạn sẽ có thêm một bước trung gian đó là staging (bước testing trước khi publish thành phiên bản production). Lúc này, bạn sẽ đối mặt với việc đồng bộ hoá dữ liệu.
Bước staging có ưu điểm về bảo mật cũng như tránh mất mát dữ liệu khi xảy ra sự cố, đồng thời đảm bảo tính sẵn sàng (available) của phiên bản production đang được khách hàng sử dụng. Tuy nhiên, điều này sẽ trở nên bất lợi khi làm việc với Big Data.
Như đã được đề cập ở trên, khó khăn của Big Data đó là thời gian và kiểm chứng sự đúng đắn của dữ liệu. Mặc dù thuật toán của bạn chạy đúng trên local và staging nhưng chưa chắc đã đúng trên phiên bản production. Sự mất đồng bộ về dữ liệu cũng như phiên bản phần mềm giữa các hệ thống luôn là mối nguy hại tiềm tàng trong tương lai và dễ dẫn đến nhiều sai sót, khó bảo trì.
Vì vậy các Data engineer, Data scientist và System admin hãy phối hợp với nhau để lên plan đồng bộ hoá dữ liệu mỗi ngày. Đồng thời, cài đặt môi trường phát triển sao cho mọi phiên bản đều đồng bộ. Như vậy, các khâu từ developing, released và production sẽ được trơn tru hơn.

Học tập công nghệ mới thật nhanh

Do more think less
Do more think less
Lĩnh vực mà bạn đang theo đuổi có tốc độ thay đổi rất nhanh. Những công nghệ bạn học được tại Đại học đã trở nên lỗi thời. Vậy làm thế nào để có thể theo kịp mọi công nghệ hiện nay. Câu trả lời đó là kiến thức nền tảng và thói quen (đam mê) vọc công nghệ mới.
Kiến thức nền tảng gồm toán học (đại số tuyến tính, toán rời rạc, giải tích, lý thuyết đồ thị, xác suất và thống kê), lập trình (C/C++, hướng đối tượng, Java, C#) và các môn cơ sở ngành (hệ điều hành, kiến trúc máy tính và hợp ngữ, mạng máy tính, cơ sở dữ liệu, cấu trúc dữ liệu và giải thuật). Những kiến thức này tạo cho bạn một điểm tựa vựng chãi khi đối diện với những đợt sóng lớn của công nghệ. Vì tất cả những gì được phát minh, sáng chế ngày nay đều dựa trên nền tảng khoa học cơ bản này. Toán học sẽ giúp cho bạn làm việc hiệu quả và logic, biết cách sắp xếp công việc và giải quyết vấn đề mạch lạc. Lập trình giúp bạn truyền tải mọi ý tưởng vào máy tính. Bản chất của máy tính là “trâu bò”. Máy tính có thể thực hiện nhiều tác vụ đơn giản theo chỉ thị của lập trình viên. Nếu bạn có thể thực hiện bằng tay các tác vụ bạn cần, bạn có thể chỉ cho máy tính làm theo ý bạn. Các môn cơ sở ngành giúp bạn có cái nhìn tổng quát về hệ thống phần mềm, giúp bạn biết được các công cụ liên quan khi giải quyết những vấn đề đối với từng ngành.
Vọc công nghệ mới, dường như là một thói quen và niềm đam mê của bất cứ ai đã xác định cho mình con đường công nghệ thông tin. Hồi xưa, khi chưa có các báo mạng chuyên ngành, tôi thường đọc các tạp chí về công nghệ như “Làm bạn với máy vi tính”, “Echip”, “Thế giới vi tính”, “Thế giới Game”, … Mỗi lần có thủ thuật hay phần mềm gì hay, tôi đều cài đặt và làm thử. Nhờ vậy mà trong vòng 2 tuần tôi đã bắt kịp nhiều công nghệ cùng lúc: git, pyspark, ipython, pandas, glassfish, node.js, bower, jira, stash, scala, mongodb, spark, sbt, maven, … Thật là may mắn nếu bạn đã từng vọc qua các công nghệ này một lần, như vậy bạn đã có lợi thế hơn rất nhiều người rồi.

Do đó, hãy lấy nền tảng kiến thức làm chỗ dựa, đừng như đom đóm chạy theo công nghệ này, tool kia, lúc chợp rồi lại tắt không vững vàng. Hãy luôn trau dồi công nghệ mới, không phải vì công việc bắt buộc mà vì sự thích thú tìm tòi học hỏi. Sẽ có lúc bạn cần tới nó, vì kiến thức không bao giờ là thừa cả.


Series: Big Data Trong Việc Phân Tích Và Phát Hiện Tội Phạm: Phần 3

Như đã đề cập trong phần 2 của series “phân tích crime pattern bằng chỉ số trần”. Trong phần 3 này chúng tôi sẽ giới thiệu một phương pháp thường thấy khác trong việc phân tích crime pattern nhằm mục đích phòng chống tội phạm, đó là “phân tích vị trí bằng bản đồ hóa tội phạm.” (Geographic Proximity/ Crime Mapping)

Phần 3: phân tích vị trí bằng bản đồ hóa tội phạm

Phương pháp bản đồ hóa tội phạm này thường được sử dụng để tạo một bản đồ của các hoạt động phạm tội theo từng loại tội phạm hoặc những điểm chung nổi bật, sau đó tiến hành tìm kiếm các điểm nóng (hotspot) về tội phạm theo vị trí diễn ra. Phương pháp này CHỈ thích hợp cho các loại crime pattern có khả năng gom cụm theo vị trí địa lý. Do nhiều crime pattern có thể bao gồm các vụ án không có liên quan nhiều về vị trí địa lý, chính vì vậy nên cũng giống như phương pháp sử dụng chỉ số trần, chúng ta không thể chỉ sử dụng một mình phương pháp này để nắm bắt được toàn bộ các crime pattern mà phải kết hợp nó cùng các phương pháp khác nhằm gia tăng độ hiệu quả trong việc phân tích và phòng chống tội phạm.
1
Hình trên là một bản đồ các vụ đột nhập nhà riêng để trộm cắp. Bằng phương pháp phân tích thủ công, cảnh sát đã khoanh vùng được 3 crime pattern #1, #2 và #3. Tuy nhiên nếu áp dụng phương pháp bản đồ hóa tội phạm (tự động) trong tình huống này thì crime pattern #2 và #3 sẽ dễ dàng bị bỏ qua nếu chương trình tự động sử dụng các tham số không thích hợp (do #2 có vị trí bao quanh hồ, khoảng cách giữa các vụ án khá xa nhau; #3 thì các vụ án xảy ra trên cùng tuyến đường nhưng vị trí cũng cách xa và phân bố không đều). Chính vì thế trong quá trình sử dụng phương pháp này thì việc xác định các tham số và áp dụng các luật tự động là rất quan trọng.
Có khá nhiều các nghiên cứu về tình trạng lặp lại của các vụ phạm tội theo từng khu vực, các dữ liệu thống kê cho thấy nếu một ngôi nhà bị trộm đột nhập, thì xác suất một căn nhà khác gần đó cũng bị trộm viếng thăm trong vòng 2 tuần tới sẽ tăng lên đáng kể. Điều này là vì thủ phạm đã quen thuộc với đường xá quanh đó, cách lựa chọn mục tiêu và tẩu thoát ra sao chẳng hạn.
Một số ý kiến cho rằng chúng ta có thể vẽ một vòng tròn xung quanh địa điểm vừa xảy ra trộm, khu vực đó chính là khu vực sẽ có khả năng xảy ra trộm cao trong tương lai gần. Tuy nhiên điều này không có nhiều tính thực tiễn lắm, các bạn có thể tưởng tượng đến trường hợp một căn nhà gần biển bị đột nhập, chúng ta không thể vẽ một vòng tròn xung quanh rồi cử vài cảnh sát ra biển đề phòng cá mập bẻ khóa ăn trộm thuyền được? Một trường hợp khác là các con đường song song và gần nhau, chúng nó có thể ở trong cùng phạm vi vòng tròn vừa vẽ, tuy đường chim bay cực ngắn nhưng ở đời thực muốn di chuyển từ đường này sang đường kia chúng ta phải đi qua một quãng đường vòng cực dài. Chính vì vậy việc phân tích chỉ dựa trên một điểm là không hợp lý.
Theo một hướng khác thì thủ phạm (trộm cướp…) khi gây án thường là ở những khu vực mà chúng đã biết (tỉ lệ gây án ở nơi xa lạ vẫn có nhưng chỉ là thiểu số). Việc xác định vị trí để gây án là thông qua các hoạt động thường ngày bình thường, chúng vẫn tham gia giao thông, di chuyển từ địa điểm này sang địa điểm kia…Bằng việc làm như thế, chúng có thể tìm ra những vị trí tiềm năng để dễ dàng gây án rồi tẩu thoát. Những khu vực mà chúng có khả năng tìm ra cơ hội gây án từ các hoạt động thường ngày gọi là awareness space (các khu vực bôi đỏ trong hình dưới).
2
Dĩ nhiên các khu vực này chính là những con đường trong thực tế. Những con đường có càng nhiều awereness space, những con đường đông đúc người qua lại, thường sẽ có tỉ lệ tội phạm cao hơn. Vậy chúng ta sẽ tiến hành phân tích vị trí bằng cách dựng các vụ phạm tội lên một bản đồ đường gọi là Betweenness.
Ý tưởng của việc dựng Betweenness là:
  • Đưa toàn bộ các vụ án cùng loại lên bản đồ khu vực, mỗi vụ được xem như một điểm.
  • Chọn một cặp điểm bắt đầu và kết thúc, tìm đường đi ngắn nhất giữa cặp điểm này trên bản đồ.
  • Con đường nào trên bản đồ được đường ngắn nhất giữa một cặp điểm đi qua thì tăng Betweenness của con đường đó lên 1.
  • Duyệt tương tự toàn bộ các cặp điểm.
3
Như hình phía trên các bạn có thể thấy phần đường đỏ nhất là phần có Betweenness lớn nhất, hay như nãy giờ tôi đã đề cập đến, chính là đoạn đường có khả năng lớn nhất xảy ra các tội phạm tương tự trong tương lai gần. Làm thế nào để chứng minh và ủng hộ cho lí thuyết này là đúng? Mời các bạn đến với một bản đồ Betweenness được dựng lên từ Big Data về tội phạm cướp giật, ẩu đả và trộm cắp xe ở khu Camden thuộc London, Anh.
4
Phía tay phải là bản đồ Betweenness được dựng lên từ Big Data tội phạm của sở cảnh sát Camden các đoạn được tô xanh lá và đỏ là những khu vực có Betweenness cao. Bản đồ bên tay trái là những vụ phạm tội xảy ra được thông báo cho cảnh sát qua đầu số 999 (đầu số khẩn cấp ở Anh) được dựng lên một thời gian sau khi bản đồ Betweenness được xây dựng. Các bạn có thể dễ dàng nhận ra phần lớn các vụ phạm tội xảy ra nằm ngay trên hoặc rất gần các tuyến đường có Betweenness cao.
Một số nghiên cứu khác ủng hộ cho Betweenness như Porta et al “Street centrality and densities of retail and services in Bologna, Italy”,… Các bạn có thể tham khảo thêm.
Như vậy, sử dụng Betweenness trong việc bản đồ hóa tội phạm là khá tốt để dự đoán những hoạt động phạm pháp. Mặt khác, chúng ta còn có thể kết hợp kĩ thuật này với các kĩ thuật phân cụm và xác định điểm nóng (hotspot) để tăng thêm độ chính xác và cụ thể cho công tác dự đoán phòng ngừa tội phạm.
Trong phần tiếp theo của series chúng tôi sẽ giới thiệu tiếp cho các bạn về việc sử dụng kĩ thuật phân cụm cho Big Data về tội phạm như thế nào, mời các bạn đón xem.

Series: Big Data Trong Việc Phân Tích Và Phát Hiện Tội Phạm: Phần 2

Phần 2 trong series Big Data Trong Việc Phân Tích Và Phát Hiện Tội Phạm” sẽ chia sẻ về việc phân tích crime pattern bằng chỉ số trần.
Trong bài đầu tiên chúng tôi đã đề cập đến các hướng đi chính trong việc sử dụng Big Data để phát hiện và phòng chống tội phạm. Trong phần 2 này chúng tôi sẽ đi vào một trend chính là phòng chống và dự đoán tội phạm với Big Data sử dụng phương pháp phân tích crime pattern (từ này dịch ra tiếng Việt thì chuối chết nên để vậy)
big data crime part 2_2
Người ta thường dùng 3 phương pháp sau để phân tích crime pattern là:
big data crime part 2_3
Trong phần này, chúng ta sẽ đi vào phương pháp thứ nhất – Phát hiện dị biệt sử dụng việc phân tích chỉ số trần
big data crime part 2_4
1
Với phương pháp này thì điều kiện tiên kiết phải có là một lượng dữ liệu tội phạm đủ lớn (big data khoảng 6 năm trở lên để đạt được hiệu quả tốt). Việc sử dụng phương pháp này có mục đích chính là tìm ra crime pattern ẩn dựa trên mốc thời gian hoặc địa điểm gây án. Nếu phát hiện được pattern ẩn theo địa điểm gây án thì sẽ kết hợp với phương pháp phân tích vị trí bằng bản đồ hóa tội phạm để đưa ra kết quả tốt nhất.
Phân tích chỉ số trần (threshold) đơn giản là dùng phương pháp thống kê cho big data để xác định được khi nào hoặc ở đâu mà tội ác diễn ra “cao hơn đáng kể so với những thời gian khác hoặc địa điểm khác”. Một kĩ thuật thường được sử dụng cho việc này là ĐỘ LỆCH CHUẨN (STANDARD DEVIATION). Công thức là:
2
Trong đó ∑ là tính tổng,  là giá trị của một data set,  là trung bình cộng của các data set, và  là số các điểm dữ liệu.
Ví dụ đơn giản về áp dụng độ lệch chuẩn cho Big Data như sau:
Giả sử chúng tôi đã có được một bộ Big Data về tội phạm đột nhập vào nhà để trộm cắp trên 4 quận địa bàn Đà Nẵng (Hải Châu, Thanh Khê, Sơn Trà, Ngũ Hành Sơn) trong vòng 5 năm từ 2012 đến 2016. Để bắt đầu phân tích chúng tôi sẽ chuẩn bị và tổ chức dữ liệu theo các thuộc tính là địa điểm và thời gian. Sau đó tiến hành tính toán độ lệch chuẩn cho năm hiện tại.
Đầu tiên chúng tôi sẽ tính độ lệch chuẩn của quận Hải Châu trong vòng 8 năm (chỉ cho tháng 1). Big Data sau khi được tổ chức sẽ có dạng đơn giản như sau:
3
Độ lệch chuẩn của quận Hải Châu trong THÁNG 01 trong vòng 8 năm (2009-2016) sẽ là:
4
Sau khi đã có độ lệch chuẩn từ dữ liệu quá khứ chúng ta có thể tiến hành so sánh với dữ liệu năm nay bằng cách lấy số vụ của 01/2017 trừ đi số vụ trung bình  rồi chia cho độ lệch chuẩn.
5
Tiếp tục với các quận còn lại, ta có thể có một bảng lệch chuẩn đơn giản như sau:
Đột nhập trộm cắp tại 4 quận Đà Nẵng trong tháng 01/2017
6
Nhiều nghiên cứu đã chỉ ra trong điều kiện phân bố bình thường, ngẫu nhiên thì sẽ có khoảng 68% các biến số (ở đây là số vụ trộm) sẽ rơi vào khoảng -0.5 tới +0.5 so với độ lệch chuẩn TB; 95% sẽ rơi vào khoảng -1 tới +1; đến 99.7% sẽ rơi vào khoảng -1.5 đến + 1.5. Như vậy khi áp dụng vào đời thực, ta có thể sử dụng các trạng thái sau cho tình hình trộm cắp:
“Lạnh” – các vụ phạm tội ít hơn 2 SD so với TB
“Mát” – các vụ phạm tội ít hơn từ 1 đến 2 SD so với TB
“Bình thường” – các vụ phạm tội từ ít hơn 1 SD đến nhiều hơn 1 SD so với TB
“Ấm” – các vụ phạm tội nhiều hơn từ 1 đến 2 SD so với TB
“Nóng” – các vụ phạm tội nhiều hơn 2 SD so với TB
Bảng lệch chuẩn trên chỉ dành cho tháng 1, chúng ta sẽ có 12 bảng như vậy cho 12 tháng. Bằng việc sử dụng bảng lệch chuẩn này chúng ta có thể dễ dàng phát hiện ra được những xu hướng tăng giảm của hoạt động tội phạm để có thể tiến hành bố trí resource phòng ngừa thích hợp. Thử nghĩ đến trường hợp nếu trong quý 1, 3 năm liên tiếp từ 2015 đến 2017, tỉ lệ phạm tội ở quận Hải Châu luôn ở trạng thái ấm hoặc nóng thì có khả năng rất cao tỉ lệ này cũng sẽ gia tăng như vậy trong năm tiếp theo. Vì thế việc tăng cường tuần tra, rà quét trong khu vực là cực kì cần thiết để hạn chế tội phạm diễn ra.
7
Có thể các bạn sẽ thấy dự đoán này khá đơn giản và sơ sài nhưng đừng quên ở đây chúng ta chỉ sử dụng duy nhất một thuộc tính thời gian của Big Data tội phạm. Nếu có thể tìm ra những phương pháp kết hợp những thuộc tính khác như địa điểm (sẽ nói trong phần sau), khoảng thời gian diễn ra, tình trạng xung quanh,… thì chúng ta có thể có những suy đoán và cảnh báo chính xác và cụ thể hơn nhiều. Với một lượng lớn dữ liệu từ Big Data chúng ta có thể giới hạn phạm vi dự đoán ở một loại tội phạm hay một khu vực nhỏ (một phường nào đó của quận Hải Châu chẳng hạn) thì việc phân bổ nguồn lực và phân tích cảnh báo sẽ càng hiệu quả hơn nữa.
Một ứng dụng đang dùng phương pháp phân tích crime pattern là PREDPOL, một phần mềm dự đoán thời gian và địa điểm tội phạm sẽ xảy ra, hiện đang được sử dụng bởi sở cảnh sát Los Angeles, USA; PREDPOL chỉ sử dụng 3 thuộc tính là: loại tội phạm, địa điểm phạm tội và thời gian cụ thể mà phần mềm này đã giúp sở cảnh sát LA ngăn chặn hơn 20% số tội phạm được dự đoán trong 3 năm trở lại đây.
8
Trong phần này chúng tôi đã giới thiệu cho các bạn một phương pháp là sử dụng độ lệch trần để phân tích lượng tội phạm tăng giảm nhằm dự đoán xu hướng tội phạm sẽ diễn ra trong tương lai gần. Trong phần tiếp theo chúng tôi sẽ tiếp tục với một phương pháp khác trong việc phân tích crime pattern là “phân tích vị trí bằng bản đồ hóa tội phạm”. Mời các bạn đón xem.

Series: Big Data Trong Việc Phân Tích Và Phát Hiện Tội Phạm: Phần 1

Phần 1 trong series “Big Data Trong Việc Phân Tích Và Phát Hiện Tội Phạm” sẽ chia sẻ về giai đoạn chuẩn bị dữ liệu, hướng dẫn sử dụng và các lưu ý.
Big Data là thuật ngữ dùng để chỉ một tập hợp dữ liệu rất lớn và rất phức tạp đến nỗi những công cụ, ứng dụng xử lí dữ liệu truyền thống không thể nào đảm đương được. Tuy nhiên, Big Data lại chứa trong mình rất nhiều thông tin quý giá mà nếu trích xuất thành công, nó sẽ giúp rất nhiều cho việc kinh doanh, nghiên cứu khoa học, dự đoán các dịch bệnh sắp phát sinh và thậm chí là cả việc xác định điều kiện giao thông theo thời gian thực. Chính vì thế, những dữ liệu này phải được thu thập, tổ chức, lưu trữ, tìm kiếm, chia sẻ theo một cách khác so với bình thường.

Phần I: Chuẩn bị dữ liệu, hướng sử dụng và các lưu ý

Trong loạt bài viết này, chúng tôi muốn giới thiệu đến các bạn việc sử dụng Big Data trong phân tích hành vi tội phạm cũng như dự đoán, phát hiện và ngăn chặn tội phạm như thế nào.
big data crime 1
Nên nhớ rằng số lượng cảnh sát là có hạn, việc phân bổ giữa cảnh sát tuần tra và cảnh sát thường trực hợp lí là cực kì quan trọng để đảm bảo cả hệ thống hoạt động hiệu quả.
Mỗi cục cảnh sát thường sẽ lưu lại một số lượng rất lớn những báo cáo tội phạm qua từng năm. Việc phân tích các dữ liệu này có thể giúp chúng ta:
  • Phòng chống tội phạm: bao gồm việc dự đoán khả năng xảy ra tội ác (địa điểm và thời gian), tỉ lệ xuất hiện một loại tội phạm trong một khoảng thời gian nhất định, các vấn đề có thể phát sinh sau các sự kiện khách quan,…
  • Truy bắt tội phạm: sử dụng Big Data để phân tích tâm lí và hành vi tội phạm, tìm hiểu cách thức tội ác được thực hiện, nhận dạng tội phạm, thiết lập các giả thiết về nghi phạm,…
Đây là hai hướng đi chính hiện nay trong việc áp dụng Big Data trong phân tích và phát hiện tội phạm. Điều thú vị là cả hai hướng đi này đều áp dụng một phương thức phân tích khá tương đồng. Mục đích chính của phương thức này là để xây dựng một giải pháp phân tích mà cảnh sát có thể sử dụng để phát hiện những manh mối liên quan giữa các vụ án, thời gian, địa điểm và các manh mối chi tiết, phương thức gồm các bước như sau:
big data crime 2

1.Xử lí trước

Dữ liệu thường được xử lí trước tùy thuộc vào mục đích sử dụng. Trong một báo cáo vụ án thường sẽ có những thuộc tính chính như sau:
big data crime 3
Dữ liệu sẽ được xử lí trước và chọn lọc lại những thuộc tính cần thiết cho quá trình sử dụng, ví dụ trong việc xác định các khu vực nóng về tỉ lệ phạm tội thì người phân tích thường quan tâm đến các thuộc tính 1,3,4. Để xác định tâm lí tội phạm thì thường quan tâm đến các thuộc tính 1, 2, 3, 5, 7, 8, 9. Để xác định các phương thức tội phạm thường sử dụng thì lại quan tâm hơn đến 1, 2, 3, 4, 5, 9 chẳng hạn.

2. Phân tích + Tinh chỉnh & Nhận biết.

big data crime 4
Phòng chống tội phạm: Dự đoán tội phạm gây án ở địa điểm, thời gian, hoàn cảnh nào đó. Sử dụng các thuật toán tìm đường di chuyển chung, các thuật toán phân lớp để xác định điểm nóng phạm tội,…
4
Một sơ đồ đường di chuyển chung của tội phạm sau khi phân tích
Truy bắt tội phạm: Xác định cách thức gây án chung, thuật toán suy đoán các thủ thuật tương tự để rút gọn phạm vi nghi phạm, thuật toán định dạng khuôn mặt tội phạm,…
5
Nhận dạng khuôn mặt tội phạm
Chúng tôi sẽ nói chi tiết về từng thuật toán nổi bật được sử dụng trong các phần tiếp theo của series.

3. Báo cáo & Đánh giá

big data crime 5
Việc báo cáo và đánh giá này chủ yếu nhằm xác định tính chính xác và tin cậy của các mô hình dự đoán cũng như các quyết định được đưa ra trong quá trình truy bắt.
Mức độ tin cậy phần lớn được định nghĩa CHỦ QUAN (ví dụ dự đoán khoảng 60% sẽ xuất hiện tội phạm ở khu vực A vào 18:00 chủ nhật có thể được coi là không đủ tin cậy hoặc đủ tin cậy tùy theo người có thẩm quyền quyết định)
Việc sử dụng các công cụ dự đoán và phân tích dựa trên Big Data hiện đã được áp dụng cho nhiều thành phố ở Mĩ, Anh, Trung Quốc,… và thu được kết quả rất khả quan.
Trong các bài tiếp theo chúng tôi sẽ đi lần lượt vào hai hướng đi chính trong phát hiện tội phạm với Big Data là phòng chống tội phạm và truy bắt tội phạm. Ở mỗi hướng đi này chúng tôi sẽ đưa ra một thuật toán thông dụng nhất, mục đích và điểm mạnh/ điểm yếu của các thuật toán đó. Mời các bạn đón xem.

Trào Lưu 10 Years Challenge Của Facebook Chỉ Là Một Trò Chơi Vô Hại?




Bạn cho rằng, trào lưu #10yearschallenge là một meme vô hại? Nhưng sau khi đọc bài viết này, có thể bạn sẽ muốn suy nghĩ lại.
Nếu bạn sử dụng mạng xã hội, chắc hẳn gần đây có để ý đến một trào lưu ngập tràn Facebook, Instagram, và Twitter của người dùng post ảnh của họ ngày ấy-bây giờ, chủ yếu là từ 10 năm trước và năm nay.
Tác giả bài báo đặt giả thuyết các dữ liệu ảnh này có thể đã bị khai thác để huấn luyện thuật toán nhận diện khuôn mặt trong việc xác định mức độ già hóa và nhận diện tuổi tác. Những người phản đối giả thuyết này cho rằng những bức ảnh đằng nào cũng có trên mạng xã hội trước trào lưu này, các dữ liệu này đã có sẵn, và Facebook đằng nào cũng đã có trong tay tất cả các ảnh đại diện người dùng.
Đương nhiên là vậy, nhưng nhìn theo hướng này thử xem.
Tưởng tượng rằng bạn muốn huấn luyện một thuật toán nhận diện khuôn mặt về các đặc điểm liên quan đến tuổi tác, mà cụ thể hơn, là đặc điểm của sự già hóa (ví dụ, người ta trông ra sao khi họ già đi), bạn sẽ cần một dataset thật lớn và chặt chẽ với rất nhiều các hình ảnh của người khác.
Nếu bạn có trong tay thông tin về thời điểm chụp hai bức ảnh ở một con số cố định – ví dụ, 10 năm đi, thì mọi chuyện sẽ dễ dàng hơn rất nhiều. Hiển nhiên là, bạn có thể khai phá dữ liệu trên Facebook và thu tập ảnh đại diện rồi xem ngày đăng ảnh hay dữ liệu EXIF (Exchangeable Image File Format – dữ liệu thông tin về thời gian chụp, các thiết lập của máy ảnh và có thể là các thông tin về bản quyền của bức ảnh đó). Nhưng tất cả những ảnh đại diện đó vẫn có thể gây ra nhất nhiều thông tin nhiễu.
Điều này là bởi người ta thường không upload ảnh theo trình tự thời gian, và việc người ta để ảnh đại diện là hình chó mèo và nhân vật hoạt hình chứ không phải ảnh bản thân không phải là chuyện hiếm. Hơn nữa, các bức ảnh thường không được đăng tải trùng với ngày nó được chụp. Thông qua trào lưu mới trên Facebook, rất nhiều người đã vô tình cung cấp thêm bối cảnh (“tôi năm 2008 và tôi năm 2018”) cũng như là rất nhiều các thông tin khác, trong một số trường hợp người ta ghi cả nơi ảnh được chụp và được chụp như thế nào. (“2008 tại University of Whatever, chụp bởi Joe; 2018 đi thăm New City cho sự kiện gì gì đó năm nay).
Nói cách khác, nhờ và trào lưu này, ai đó đã có trong tay một dataset rất lớn những bức ảnh của mọi người trong khoảng 10 năm trước và hiện tại, tất cả các bức ảnh này đều đã được giám tuyển vô cùng cẩn thận.
Về phần mình, Facebook phủ nhận nhúng tay vào trào lưu #10YearsChallenge. “Đây là một cái meme do người dùng tự tạo và tự trở nên viral”, người phát ngôn của Facebook cho biết. Nhưng ngay cả khi trào lưu này không phải là một sản phẩm của kỹ thuật tấn công social engineering, vài năm gần đây chúng ta đã chứng kiến rất nhiều những ví dụ về các games tương tác và memes được thiết kế ra để khai thác và thu thập dữ liệu người dùng. Social engineering là hành vi đánh lừa người dùng của hệ thống, nhằm phá vỡ hệ thống an ninh, lấy cắp dữ liệu hoặc tống tiền. Nói một cách khác, một trò lừa đảo rất tinh vi trên Internet.
Nếu ai đó lấy ảnh Facebook của bạn ra để huấn luyện thuật toán nhận dạng khuôn mặt thì có phải là xấu không? Cũng không hẳn, theo một cách nào đó, chuyện này là không thể tránh khỏi. Tuy vậy, điều cần quan tâm hơn ở đây chính là cách chúng ta cần nhìn nhận các tương tác của mình với công nghệ, cẩn trọng hơn với những dữ liệu mà mìnhtạo ra, và cách mà chúng có thể bị sử dụng trên nhiều phương diện.


The Ultimate XP Project

  (Bài chia sẻ của tác giả  Ryo Amano ) Trong  bài viết  số này, tôi muốn viết về dự án phát triển phần mềm có áp dụng nguyên tắc phát triển...