pm4py.algo.conformance.alignments.dfg.variants package#
PM4Py – A Process Mining Library for Python
Copyright (C) 2024 Process Intelligence Solutions UG (haftungsbeschränkt)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see this software project’s root or visit <https://www.gnu.org/licenses/>.
Website: https://processintelligence.solutions Contact: info@processintelligence.solutions
Submodules#
pm4py.algo.conformance.alignments.dfg.variants.classic module#
PM4Py – A Process Mining Library for Python
Copyright (C) 2024 Process Intelligence Solutions UG (haftungsbeschränkt)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see this software project’s root or visit <https://www.gnu.org/licenses/>.
Website: https://processintelligence.solutions Contact: info@processintelligence.solutions
- class pm4py.algo.conformance.alignments.dfg.variants.classic.Parameters(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]#
Bases:
Enum- CASE_ID_KEY = 'pm4py:param:case_id_key'#
- ACTIVITY_KEY = 'pm4py:param:activity_key'#
- TIMESTAMP_KEY = 'pm4py:param:timestamp_key'#
- SYNC_COST_FUNCTION = 'sync_cost_function'#
- MODEL_MOVE_COST_FUNCTION = 'model_move_cost_function'#
- LOG_MOVE_COST_FUNCTION = 'log_move_cost_function'#
- INTERNAL_LOG_MOVE_COST_FUNCTION = 'internal_log_move_cost_function'#
- PARAMETER_VARIANT_DELIMITER = 'variant_delimiter'#
- class pm4py.algo.conformance.alignments.dfg.variants.classic.Outputs(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]#
Bases:
Enum- ALIGNMENT = 'alignment'#
- COST = 'cost'#
- VISITED = 'visited_states'#
- CLOSED = 'closed'#
- INTERNAL_COST = 'internal_cost'#
- pm4py.algo.conformance.alignments.dfg.variants.classic.apply(obj: EventLog | Trace, dfg: Dict[Tuple[str, str], int], sa: Dict[str, int], ea: Dict[str, int], parameters: Dict[str | Parameters, Any] | None = None) Dict[str, Any] | List[Dict[str, Any]][source]#
Applies the alignment algorithm provided a log/trace object, and a connected DFG
Parameters#
- obj
Event log / Trace
- dfg
Connected directly-Follows Graph
- sa
Start activities
- ea
End activities
- parameters
Parameters of the algorithm: - Parameters.SYNC_COST_FUNCTION: for each activity that is in both the trace and the model, provide the non-negative cost of a sync move - Parameters.MODEL_MOVE_COST_FUNCTION: for each activity that is in the model, provide the non-negative cost of a model move - Parameters.LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move that is returned in the alignment to the user (but not used internally for ordering the states) - Parameters.INTERNAL_LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move that is used internally for ordering the states in the search algorithm. - Parameters.ACTIVITY_KEY: the attribute of the log that is the activity
Returns#
- ali
Result of the alignment
- pm4py.algo.conformance.alignments.dfg.variants.classic.apply_log(log, dfg, sa, ea, parameters=None)[source]#
Applies the alignment algorithm provided a log object, and a connected DFG
Parameters#
- log
Event log
- dfg
Connected DFG
- sa
Start activities
- ea
End activities
- parameters
Parameters of the algorithm: - Parameters.SYNC_COST_FUNCTION: for each activity that is in both the trace and the model, provide the non-negative cost of a sync move - Parameters.MODEL_MOVE_COST_FUNCTION: for each activity that is in the model, provide the non-negative cost of a model move - Parameters.LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move that is returned in the alignment to the user (but not used internally for ordering the states) - Parameters.INTERNAL_LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move that is used internally for ordering the states in the search algorithm. - Parameters.ACTIVITY_KEY: the attribute of the log that is the activity
Returns#
- aligned_traces
For each trace, contains a dictionary describing the alignment
- pm4py.algo.conformance.alignments.dfg.variants.classic.apply_trace(trace, dfg, sa, ea, parameters=None)[source]#
Applies the alignment algorithm provided a trace of a log, and a connected DFG
Parameters#
- trace
Trace
- dfg
Connected DFG
- sa
Start activities
- ea
End activities
- parameters
Parameters of the algorithm: - Parameters.SYNC_COST_FUNCTION: for each activity that is in both the trace and the model, provide the non-negative cost of a sync move - Parameters.MODEL_MOVE_COST_FUNCTION: for each activity that is in the model, provide the non-negative cost of a model move - Parameters.LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move that is returned in the alignment to the user (but not used internally for ordering the states) - Parameters.INTERNAL_LOG_MOVE_COST_FUNCTION: for each activity that is in the trace, provide the cost of a log move that is used internally for ordering the states in the search algorithm. - Parameters.ACTIVITY_KEY: the attribute of the log that is the activity
Returns#
- ali
Dictionary describing the alignment
- pm4py.algo.conformance.alignments.dfg.variants.classic.apply_from_variants_list_dfg_string(var_list, dfg_serialization, parameters=None)[source]#
- pm4py.algo.conformance.alignments.dfg.variants.classic.apply_from_variants_list(var_list, dfg, sa, ea, parameters=None)[source]#
- pm4py.algo.conformance.alignments.dfg.variants.classic.apply_from_variant(variant, dfg, sa, ea, parameters=None)[source]#
- pm4py.algo.conformance.alignments.dfg.variants.classic.dijkstra_to_end_node(dfg, sa, ea, start_node, end_node, activities_model, sync_cost_function, model_move_cost_function)[source]#
Gets the cost of the minimum path from a node to the end node
Parameters#
- dfg
Connected DFG
- sa
Start activities
- ea
End activities
- start_node
Start node of the graph (connected to all the start activities)
- end_node
End node of the graph (connected to all the end activities)
- activities_model
Set of the activities contained in the DFG
- sync_cost_function
Given an activity, provides the cost when the activity is executed in a sync way
- model_move_cost_function
Given an activity, provides the cost when the activity is executed as a move-on-model
Returns#
- cost_to_end_node
Dictionary associating to each node the cost to the end node
- pm4py.algo.conformance.alignments.dfg.variants.classic.project_log_on_dfg(log: EventLog | DataFrame, dfg: Dict[Tuple[str, str], int], sa: Dict[str, int], ea: Dict[str, int], parameters: Dict[str | Parameters, Any] | None = None) EventLog[source]#
Projects the traces of an event log to the specified DFG, in order to assess the conformance of the different directly-follows relationships and their performance (as the timestamps are recorded). The result is a event log where each ‘projected’ trace can be replayed on the given DFG. Each event of a ‘projected’ trace has the ‘@@is_conforming’ attribute set to: - True when the activity is mimicked by the original trace (sync move) - False when the activity is not reflected in the original trace (move-on-model) Move-on-log (activities of the trace that are not mimicked by the DFG) are skipped altogether.
Minimum Viable Example:
import pm4py from pm4py.algo.conformance.alignments.dfg.variants import classic as dfg_alignments
log = pm4py.read_xes(“tests/input_data/receipt.xes”, return_legacy_log_object=True) filtered_log = pm4py.filter_variants_top_k(log, 1) dfg, sa, ea = pm4py.discover_dfg(filtered_log)
projected_log = dfg_alignments.project_log_on_dfg(log, dfg, sa, ea) pm4py.write_xes(projected_log, “projected_log.xes”)
Parameters#
- log
Event log
- dfg
Directly-Follows Graph
- sa
Start activities
- ea
End activities
- parameters
- Parameters of the method, including:
Parameters.ACTIVITY_KEY => the attribute of the event log to be used as activity
Parameters.TIMESTAMP_KEY => the attribute of the event log to be used as timestamp
Returns#
- projected_log
Projected event log with the aforementioned features
- pm4py.algo.conformance.alignments.dfg.variants.classic.project_alignments_on_dfg(log: EventLog | DataFrame, dfg: Dict[Tuple[str, str], int], sa: Dict[str, int], ea: Dict[str, int], parameters: Dict[str | Parameters, Any] | None = None) Tuple[Dict[Tuple[str, str], Dict[str, int]], Dict[str, Dict[str, int]]][source]#
Projects alignment results onto the directly-follows graph (DFG) and activity dictionary.
This method performs a DFG-based alignment between an event log (or DataFrame) and a process model represented by a directly-follows graph. The alignment moves are categorized into three types:
SYNC (Synchronous Move): Both the log event and the model activity match.
MM (Model Move): The model activity is executed without a corresponding log event.
LM (Log Move): A log event occurs without a corresponding model activity.
After computing the alignments using the provided log and DFG (via the apply_log function), the method “projects” these results by aggregating:
For each DFG edge (transition), the number of SYNC and MM moves.
For each activity, the number of SYNC, MM, and LM moves.
Parameters#
- logUnion[EventLog, pd.DataFrame]
The event log or DataFrame containing the events.
- dfgDict[Tuple[str, str], int]
A dictionary representing the directly-follows graph where each key is a tuple of activities (from, to) and each value is the frequency of that transition.
- saDict[str, int]
A dictionary of start activities with their corresponding frequencies.
- eaDict[str, int]
A dictionary of end activities with their corresponding frequencies.
- parametersOptional[Dict[Union[str, Parameters], Any]], optional
Additional parameters to control the alignment process, by default None.
Returns#
- Tuple[Dict[Tuple[str, str], Dict[str, int]], Dict[str, Dict[str, int]]]
- A tuple containing:
conformance_dfg: A dictionary where each key is an edge (tuple of activities) from the DFG, and the value is a dictionary with keys:
‘sync’ : count of synchronous moves on that edge. ‘mm’ : count of model moves on that edge.
conformance_activities: A dictionary where each key is an activity and the value is a dictionary with keys:
‘sync’ : count of synchronous moves for the activity. ‘mm’ : count of model moves for the activity. ‘lm’ : count of log moves for the activity.